diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..388b1f114f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +branches: + only: + - master +language: python +python: + - "3.4" +before_script: + - pip install pygithub + - pip install pygithub3 +script: + - python3 tools/deploy.py +env: + global: + - secure: "KcJQbknBOdC5lA4nFGKPXVRVIGLDXDRzC8XkHuXJCE9pIR/wbxbkvx8fHKcC6SC9eHgzneC3+o4m4+CjIbVvIwDgslRbJ8Y59i90ncONmdoRx1HUYHwuYWVZm9HJFjCsIbrEqhSyyKS+PB3WZVOLbErtNHsgS8f43PTh5Ujg7Vg=" diff --git a/AUTHORS.txt b/AUTHORS.txt index 17ae9dd7c0..9a6b836bea 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -29,7 +29,9 @@ Walter Pearce ACCtomeek Adanteh aeroson +alef Aggr094 +Alganthe Anthariel BlackQwar Brakoviejo @@ -42,13 +44,14 @@ evromalarkey Falke75 Ferenczi Ferenzi -Filip Basara (Logo) +Filip Basara FreeZbe geraldbolso1899 Ghost GieNkoV gpgpgpgp Grzegorz +Gianmarco Varriale (TeamNuke) Hamburger SV Harakhti havena @@ -73,6 +76,7 @@ ramius86 simon84 Sniperwolf572 Tachi +Toaster Tonic Tourorist Valentin Torikian @@ -85,3 +89,9 @@ Kavinsky Coren OnkelDisMaster Dimaslg +VyMajoris(W-Cephei) +Bla1337 +nikolauska +adam3adam +Professor +Dharma Bellamkonda diff --git a/LICENSE b/LICENSE index b76b90e8fb..01832682d7 100644 --- a/LICENSE +++ b/LICENSE @@ -22,6 +22,10 @@ source code of the individual modules. When publishing a derivative of this product you may not use a name that might create the impression that your version is an official release. +Some folders of this project may contain a seperate LICENSE file. Should +that be the case, everything in that folder and all subfolders is subject +to that license instead. + ============================================================================ Full Gnu General Public License Text diff --git a/ace_advanced_ballistics.dll b/ace_advanced_ballistics.dll index 8f1c62484f..5aa9a66c0c 100644 Binary files a/ace_advanced_ballistics.dll and b/ace_advanced_ballistics.dll differ diff --git a/ace_breakLine.dll b/ace_breakLine.dll deleted file mode 100644 index a13e1a8da9..0000000000 Binary files a/ace_breakLine.dll and /dev/null differ diff --git a/ace_break_line.dll b/ace_break_line.dll new file mode 100644 index 0000000000..0379fd6f34 Binary files /dev/null and b/ace_break_line.dll differ diff --git a/ace_clipboard.dll b/ace_clipboard.dll new file mode 100644 index 0000000000..4f77d63f1f Binary files /dev/null and b/ace_clipboard.dll differ diff --git a/ace_fcs.dll b/ace_fcs.dll index 71fbba7d92..4d8790b150 100644 Binary files a/ace_fcs.dll and b/ace_fcs.dll differ diff --git a/addons/advanced_ballistics/$PBOPREFIX$ b/addons/advanced_ballistics/$PBOPREFIX$ new file mode 100644 index 0000000000..1ab65b7c32 --- /dev/null +++ b/addons/advanced_ballistics/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\advanced_ballistics \ No newline at end of file diff --git a/addons/advanced_ballistics/XEH_postInit.sqf b/addons/advanced_ballistics/XEH_postInit.sqf index 3f0e101d3b..b59737412a 100644 --- a/addons/advanced_ballistics/XEH_postInit.sqf +++ b/addons/advanced_ballistics/XEH_postInit.sqf @@ -4,27 +4,14 @@ GVAR(currentbulletID) = -1; -GVAR(bulletDatabase) = []; -GVAR(bulletDatabaseStartTime) = []; -GVAR(bulletDatabaseSpeed) = []; -GVAR(bulletDatabaseFrames) = []; -GVAR(bulletDatabaseLastFrame) = []; -GVAR(bulletDatabaseHDeflect) = []; -GVAR(bulletDatabaseSpinDrift) = []; -GVAR(bulletDatabaseOccupiedIndices) = []; -GVAR(bulletDatabaseFreeIndices) = []; - -GVAR(WindInfo) = false; -GVAR(WindInfoStart) = time; - GVAR(Protractor) = false; GVAR(ProtractorStart) = time; GVAR(currentGrid) = 0; -GVAR(INIT_MESSAGE_ENABLED) = false; +GVAR(initMessageEnabled) = false; GVAR(extensionAvailable) = true; -/* @TODO: Remove this until verisoning is in sync with cmake/build versioning +/* @TODO: Remove this until versioning 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 { diff --git a/addons/advanced_ballistics/XEH_preInit.sqf b/addons/advanced_ballistics/XEH_preInit.sqf index 1d19a9c492..12018ad412 100644 --- a/addons/advanced_ballistics/XEH_preInit.sqf +++ b/addons/advanced_ballistics/XEH_preInit.sqf @@ -6,12 +6,12 @@ PREP(calculateAmmoTemperatureVelocityShift); PREP(calculateAtmosphericCorrection); PREP(calculateBarrelLengthVelocityShift); PREP(calculateRetardation); -PREP(calculateRoughnessLength); PREP(calculateStabilityFactor); -PREP(calculateWindSpeed); PREP(displayProtractor); PREP(handleFired); PREP(initializeTerrainExtension); PREP(initModuleSettings); +PREP(readAmmoDataFromConfig); +PREP(readWeaponDataFromConfig); ADDON = true; diff --git a/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf b/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf index c92e679a66..28df9d1d97 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf @@ -4,7 +4,7 @@ * Calculates the ammo temperature induced muzzle velocity shift * * Arguments: - * 0: ammo - classname + * 0: muzzle velocity shift lookup table - m/s * 1: temperature - degrees celcius * * Return Value: @@ -15,17 +15,11 @@ */ #include "script_component.hpp" -private ["_ammo", "_temperature", "_muzzleVelocityTable", "_muzzleVelocityShift", "_temperatureIndexA", "_temperatureIndexB", "_temperatureRatio"]; -_ammo = _this select 0; -_temperature = _this select 1; +private ["_muzzleVelocityShiftTable", "_temperature", "_muzzleVelocityShift", "_temperatureIndexA", "_temperatureIndexB", "_temperatureRatio"]; +_muzzleVelocityShiftTable = _this select 0; +_temperature = _this select 1; -_muzzleVelocityTable = []; - -if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ammoTempMuzzleVelocityShifts")) then { - _muzzleVelocityTable = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ammoTempMuzzleVelocityShifts"); -}; - -if (count _muzzleVelocityTable != 11) exitWith { 0 }; +if (count _muzzleVelocityShiftTable != 11) exitWith { 0 }; _temperatureIndexA = floor((_temperature + 15) / 5); _temperatureIndexA = 0 max _temperatureIndexA; @@ -37,6 +31,6 @@ _temperatureIndexB = _temperatureIndexB min 10; _temperatureRatio = ((_temperature + 15) / 5) - floor((_temperature + 15) / 5); -_muzzleVelocityShift = (_muzzleVelocityTable select _temperatureIndexA) * (1 - _temperatureRatio) + (_muzzleVelocityTable select _temperatureIndexB) * _temperatureRatio; +_muzzleVelocityShift = (_muzzleVelocityShiftTable select _temperatureIndexA) * (1 - _temperatureRatio) + (_muzzleVelocityShiftTable select _temperatureIndexB) * _temperatureRatio; _muzzleVelocityShift diff --git a/addons/advanced_ballistics/functions/fnc_calculateBarrelLengthVelocityShift.sqf b/addons/advanced_ballistics/functions/fnc_calculateBarrelLengthVelocityShift.sqf index b4cbd5bdc0..de037f49bc 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateBarrelLengthVelocityShift.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateBarrelLengthVelocityShift.sqf @@ -4,9 +4,10 @@ * Calculates the muzzle velocity shift caused by different barrel lengths * * Arguments: - * 0: ammo - classname - * 0: weapon - classname - * 1: muzzle velocity - m/s + * 0: barrel length - mm + * 1: muzzle velocity lookup table - m/s + * 2: barrel length lookup table - mm + * 3: muzzle velocity - m/s * * Return Value: * 0: muzzle velocity shift - m/s @@ -16,25 +17,13 @@ */ #include "script_component.hpp" -private ["_ammo", "_weapon", "_barrelLength", "_muzzleVelocityTable", "_barrelLengthTable", "_muzzleVelocity", "_lowerIndex", "_upperIndex", "_barrelLengthRatio", "_muzzleVelocityNew"]; -_ammo = _this select 0; -_weapon = _this select 1; -_muzzleVelocity = _this select 2; - -_barrelLength = getNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_barrelLength"); +private ["_barrelLength", "_muzzleVelocityTable", "_barrelLengthTable", "_muzzleVelocity", "_lowerIndex", "_upperIndex", "_barrelLengthRatio", "_muzzleVelocityNew"]; +_barrelLength = _this select 0; +_muzzleVelocityTable = _this select 1; +_barrelLengthTable = _this select 2; +_muzzleVelocity = _this select 3; if (_barrelLength == 0) exitWith { 0 }; - -_muzzleVelocityTable = []; -_barrelLengthTable = []; - -if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_muzzleVelocities")) then { - _muzzleVelocityTable = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_muzzleVelocities"); -}; -if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_barrelLengths")) then { - _barrelLengthTable = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_barrelLengths"); -}; - if (count _muzzleVelocityTable != count _barrelLengthTable) exitWith { 0 }; if (count _muzzleVelocityTable == 0 || count _barrelLengthTable == 0) exitWith { 0 }; if (count _muzzleVelocityTable == 1) exitWith { (_muzzleVelocityTable select 0) - _muzzleVelocity }; diff --git a/addons/advanced_ballistics/functions/fnc_calculateStabilityFactor.sqf b/addons/advanced_ballistics/functions/fnc_calculateStabilityFactor.sqf index 81b71aeb3b..9b205c3ec2 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateStabilityFactor.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateStabilityFactor.sqf @@ -4,10 +4,10 @@ * Calculates the stability factor of a bullet * * Arguments: - * 0: caliber - inches - * 1: bullet length - inches - * 2: bullet mass - grains - * 3: barrel twist - inches + * 0: caliber - mm + * 1: bullet length - mm + * 2: bullet mass - grams + * 3: barrel twist - mm * 4: muzzle velocity shift - m/s * 5: temperature - degrees celcius * 6: barometric Pressure - hPA @@ -17,7 +17,8 @@ * * Public: No */ - +#include "script_component.hpp" + private ["_caliber", "_bulletLength", "_bulletMass", "_barrelTwist", "_muzzleVelocity", "_temperature", "_barometricPressure", "_l", "_t", "_stabilityFactor"]; _caliber = _this select 0; _bulletLength = _this select 1; @@ -31,15 +32,14 @@ _barometricPressure = _this select 6; _t = _barrelTwist / _caliber; _l = _bulletLength / _caliber; -_stabilityFactor = 30 * _bulletMass / (_t^2 * _caliber^3 * _l * (1 + _l^2)); +_stabilityFactor = 7587000 * _bulletMass / (_t^2 * _caliber^3 * _l * (1 + _l^2)); -_muzzleVelocity = _muzzleVelocity * 3.2808399; -if (_muzzleVelocity > 1120) then { - _stabilityFactor = _stabilityFactor * (_muzzleVelocity / 2800) ^ (1/3); +if (_muzzleVelocity > 341.376) then { + _stabilityFactor = _stabilityFactor * (_muzzleVelocity / 853.44) ^ (1/3); } else { - _stabilityFactor = _stabilityFactor * (_muzzleVelocity / 1120) ^ (1/3); + _stabilityFactor = _stabilityFactor * (_muzzleVelocity / 341.376) ^ (1/3); }; -_stabilityFactor = _stabilityFactor * (_temperature + 273) / (15 + 273) * 1013.25 / _barometricPressure; +_stabilityFactor = _stabilityFactor * KELVIN(_temperature) / KELVIN(15) * 1013.25 / _barometricPressure; _stabilityFactor diff --git a/addons/advanced_ballistics/functions/fnc_calculateWindSpeed.sqf b/addons/advanced_ballistics/functions/fnc_calculateWindSpeed.sqf deleted file mode 100644 index e7b0a322e8..0000000000 --- a/addons/advanced_ballistics/functions/fnc_calculateWindSpeed.sqf +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Author: Ruthberg - * - * Calculates the true wind speed at a given world position - * - * Arguments: - * 0: _this - world position - * - * Return Value: - * 0: wind speed - m/s - * - * Public: No - */ -#include "script_component.hpp" - -private ["_windSpeed", "_windDir", "_height", "_newWindSpeed", "_windSource", "_roughnessLength"]; - -fnc_polar2vect = { - private ["_mag2D"]; - _mag2D = (_this select 0) * cos((_this select 2)); - [_mag2D * sin((_this select 1)), _mag2D * cos((_this select 1)), (_this select 0) * sin((_this select 2))]; -}; - -_windSpeed = vectorMagnitude ACE_wind; -_windDir = (ACE_wind select 0) atan2 (ACE_wind select 1); - -// Wind gradient -if (_windSpeed > 0.05) then { - _height = (ASLToATL _this) select 2; - _height = 0 max _height min 20; - if (_height < 20) then { - _roughnessLength = _this call FUNC(calculateRoughnessLength); - _windSpeed = _windSpeed * ln(_height / _roughnessLength) / ln(20 / _roughnessLength); - }; -}; - -// Terrain effect on wind -if (_windSpeed > 0.05) then { - _newWindSpeed = 0; - { - _windSource = [100, _windDir + 180, _x] call fnc_polar2vect; - if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 9) * _windSpeed; - }; - _windSource = [100, _windDir + 180 + _x, 0] call fnc_polar2vect; - if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 9) * _windSpeed; - }; - _windSource = [100, _windDir + 180 - _x, 0] call fnc_polar2vect; - if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 9) * _windSpeed; - }; - } forEach [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - _windSpeed = _newWindSpeed; -}; - -// Obstacle effect on wind -if (_windSpeed > 0.05) then { - _newWindSpeed = 0; - { - _windSource = [20, _windDir + 180, _x] call fnc_polar2vect; - if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 2) * _windSpeed; - }; - _windSource = [20, _windDir + 180 + _x, 0] call fnc_polar2vect; - if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 2) * _windSpeed; - }; - _windSource = [20, _windDir + 180 - _x, 0] call fnc_polar2vect; - if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 2) * _windSpeed; - }; - } forEach [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]; - _windSpeed = _newWindSpeed; -}; -_windSpeed = 0 max _windSpeed; - -_windSpeed diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index b6aae2c740..5404953bd0 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", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef", "_ballisticCoefficients", "_velocityBoundaries"]; +private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_AmmoCacheEntry", "_WeaponCacheEntry", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_bulletMass", "_bulletLength", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_stabilityFactor"]; _unit = _this select 0; _weapon = _this select 1; _mode = _this select 3; @@ -40,27 +40,34 @@ if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then { // The shooter is non local if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then { _opticsName = (primaryWeaponItems _unit) select 2; - _opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType"); + _opticType = getNumber(configFile >> "CfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType"); _abort = _opticType != 2; // We only abort if the non local shooter is not a sniper }; } else { _abort = true; }; }; -//if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // TODO: We currently do not have firedEHs on vehicles -if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; }; +//if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // We currently do not have firedEHs on vehicles +if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "CfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; }; if (_abort || !(GVAR(extensionAvailable))) exitWith { - [_bullet, getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH); + [_bullet, getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH); }; -_airFriction = getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction"); +_AmmoCacheEntry = uiNamespace getVariable format[QGVAR(%1), _ammo]; +if (isNil {_AmmoCacheEntry}) then { + _AmmoCacheEntry = _ammo call FUNC(readAmmoDataFromConfig); +}; +_WeaponCacheEntry = uiNamespace getVariable format[QGVAR(%1), _weapon]; +if (isNil {_WeaponCacheEntry}) then { + _WeaponCacheEntry = _weapon call FUNC(readWeaponDataFromConfig); +}; _bulletVelocity = velocity _bullet; _muzzleVelocity = vectorMagnitude _bulletVelocity; if (GVAR(barrelLengthInfluenceEnabled)) then { - _muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift); + _muzzleVelocityShift = [_WeaponCacheEntry select 2, _AmmoCacheEntry select 10, _AmmoCacheEntry select 11, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift); if (_muzzleVelocityShift != 0) then { _bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift)); _bullet setVelocity _bulletVelocity; @@ -70,7 +77,7 @@ if (GVAR(barrelLengthInfluenceEnabled)) then { if (GVAR(ammoTemperatureEnabled)) then { _temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2); - _muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift); + _muzzleVelocityShift = [_AmmoCacheEntry select 9, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift); if (_muzzleVelocityShift != 0) then { _bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift)); _bullet setVelocity _bulletVelocity; @@ -85,16 +92,16 @@ if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER") then { } else { if (currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then { _opticsName = (primaryWeaponItems ACE_player) select 2; - _opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType"); + _opticType = getNumber(configFile >> "CfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType"); _bulletTraceVisible = _opticType == 2; }; }; }; -_caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber"); -_bulletLength = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_bulletLength"); -_bulletMass = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_bulletMass"); -_barrelTwist = getNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_barrelTwist"); +_caliber = _AmmoCacheEntry select 1; +_bulletLength = _AmmoCacheEntry select 2; +_bulletMass = _AmmoCacheEntry select 3; +_barrelTwist = _WeaponCacheEntry select 0; _stabilityFactor = 1.5; if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then { @@ -103,42 +110,9 @@ if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) th _stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor); }; -_twistDirection = 1; -if (isNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_twistDirection")) then { - _twistDirection = getNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_twistDirection"); - if (_twistDirection != -1 && _twistDirection != 0 && _twistDirection != 1) then { - _twistDirection = 1; - }; -}; - -_transonicStabilityCoef = 0.5; -if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef")) then { - _transonicStabilityCoef = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef"); -}; - -_dragModel = 1; -_ballisticCoefficients = []; -_velocityBoundaries = []; -_atmosphereModel = "ICAO"; -if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then { - _dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel"); - if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then { - _dragModel = 1; - }; -}; -if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then { - _ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients"); -}; -if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then { - _velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries"); -}; -if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then { - _atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere"); -}; - GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; -"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)]; +"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _AmmoCacheEntry select 0, _AmmoCacheEntry select 6, _AmmoCacheEntry select 7, _AmmoCacheEntry select 8, _AmmoCacheEntry select 5, _stabilityFactor, _WeaponCacheEntry select 1, _muzzleVelocity, _AmmoCacheEntry select 4, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)]; [{ private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"]; @@ -158,7 +132,7 @@ GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; }; if (_bulletTraceVisible && _bulletSpeed > 600) then { - drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""]; + drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.0157480315*_caliber,0.00787401574*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""]; }; call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]); diff --git a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf index 6791d26350..93a79138c6 100644 --- a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf +++ b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf @@ -13,6 +13,7 @@ #include "script_component.hpp" if (!hasInterface) exitWith {}; +if (!GVAR(enabled)) exitWith {}; if (!GVAR(extensionAvailable)) exitWith {}; private ["_initStartTime", "_mapSize", "_mapGrids", "_gridCells", "_x", "_y", "_gridCenter", "_gridHeight", "_gridNumObjects", "_gridSurfaceIsWater"]; @@ -21,7 +22,7 @@ _initStartTime = time; _mapSize = getNumber (configFile >> "CfgWorlds" >> worldName >> "MapSize"); if (("ace_advanced_ballistics" callExtension format["init:%1:%2", worldName, _mapSize]) == "Terrain already initialized") exitWith { - if (GVAR(INIT_MESSAGE_ENABLED)) then { + if (GVAR(initMessageEnabled)) then { systemChat "AdvancedBallistics: Terrain already initialized"; }; }; @@ -39,7 +40,7 @@ GVAR(currentGrid) = 0; _initStartTime = _args select 2; if (GVAR(currentGrid) >= _gridCells) exitWith { - if (GVAR(INIT_MESSAGE_ENABLED)) then { + if (GVAR(initMessageEnabled)) then { systemChat format["AdvancedBallistics: Finished terrain initialization in %1 seconds", ceil(time - _initStartTime)]; }; [_this select 1] call cba_fnc_removePerFrameHandler; diff --git a/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf new file mode 100644 index 0000000000..10e7e60df2 --- /dev/null +++ b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf @@ -0,0 +1,64 @@ +/* + * Author: Ruthberg + * + * Reads the ammo class config and updates the config cache + * + * Arguments: + * 0: ammo - classname + * + * Return Value: + * 0: [_airFriction, _caliber, _bulletLength, _bulletMass, _transonicStabilityCoef, _dragModel, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _ammoTempMuzzleVelocityShifts, _muzzleVelocityTable, _barrelLengthTable] + * + * Return value: + * None + */ +#include "script_component.hpp" + +private ["_ammo", "_airFriction", "_caliber", "_bulletLength", "_bulletMass", "_transonicStabilityCoef", "_dragModel", "_ballisticCoefficients", "_velocityBoundaries", "_atmosphereModel", "_ammoTempMuzzleVelocityShifts", "_muzzleVelocityTable", "_barrelLengthTable", "_result"]; +_ammo = _this; + +_airFriction = getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction"); +_caliber = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_caliber"); +_bulletLength = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_bulletLength"); +_bulletMass = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_bulletMass"); +_transonicStabilityCoef = 0.5; +if (isNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef")) then { + _transonicStabilityCoef = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef"); +}; +_dragModel = 1; +_ballisticCoefficients = []; +_velocityBoundaries = []; +_atmosphereModel = "ICAO"; +if (isNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_dragModel")) then { + _dragModel = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_dragModel"); + if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then { + _dragModel = 1; + }; +}; +if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then { + _ballisticCoefficients = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_ballisticCoefficients"); +}; +if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then { + _velocityBoundaries = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_velocityBoundaries"); +}; +if (isText(configFile >> "CfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then { + _atmosphereModel = getText(configFile >> "CfgAmmo" >> _ammo >> "ACE_standardAtmosphere"); +}; +_ammoTempMuzzleVelocityShifts = []; +if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_ammoTempMuzzleVelocityShifts")) then { + _ammoTempMuzzleVelocityShifts = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_ammoTempMuzzleVelocityShifts"); +}; +_muzzleVelocityTable = []; +_barrelLengthTable = []; +if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_muzzleVelocities")) then { + _muzzleVelocityTable = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_muzzleVelocities"); +}; +if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_barrelLengths")) then { + _barrelLengthTable = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_barrelLengths"); +}; + +_result = [_airFriction, _caliber, _bulletLength, _bulletMass, _transonicStabilityCoef, _dragModel, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _ammoTempMuzzleVelocityShifts, _muzzleVelocityTable, _barrelLengthTable]; + +uiNamespace setVariable [format[QGVAR(%1), _ammo], _result]; + +_result diff --git a/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf b/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf new file mode 100644 index 0000000000..cbf8731336 --- /dev/null +++ b/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf @@ -0,0 +1,34 @@ +/* + * Author: Ruthberg + * + * Reads the weapon class config and updates the config cache + * + * Arguments: + * 0: ammo - classname + * + * Return Value: + * 0: [_barrelTwist, _twistDirection, _barrelLength] + * + * Return value: + * None + */ +#include "script_component.hpp" + +private ["_weapon", "_barrelTwist", "_twistDirection", "_barrelLength", "_result"]; +_weapon = _this; + +_barrelTwist = getNumber(configFile >> "CfgWeapons" >> _weapon >> "ACE_barrelTwist"); +_twistDirection = 1; +if (isNumber(configFile >> "CfgWeapons" >> _weapon >> "ACE_twistDirection")) then { + _twistDirection = getNumber(configFile >> "CfgWeapons" >> _weapon >> "ACE_twistDirection"); + if (_twistDirection != -1 && _twistDirection != 0 && _twistDirection != 1) then { + _twistDirection = 1; + }; +}; +_barrelLength = getNumber(configFile >> "CfgWeapons" >> _weapon >> "ACE_barrelLength"); + +_result = [_barrelTwist, _twistDirection, _barrelLength]; + +uiNamespace setVariable [format[QGVAR(%1), _weapon], _result]; + +_result diff --git a/addons/advanced_ballistics/initKeybinds.sqf b/addons/advanced_ballistics/initKeybinds.sqf index 59866576aa..cddf47877a 100644 --- a/addons/advanced_ballistics/initKeybinds.sqf +++ b/addons/advanced_ballistics/initKeybinds.sqf @@ -1,4 +1,4 @@ -["ACE3", QGVAR(ProtractorKey), localize "STR_ACE_AdvancedBallistics_ProtractorKey", +["ACE3 Equipment", QGVAR(ProtractorKey), localize "STR_ACE_AdvancedBallistics_ProtractorKey", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index dbf2784f21..0de8071754 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -9,6 +9,9 @@ Afficher les info sur le vent Mostrar información del viento Windinformationen anzeigen + Széladatok mutatása + Zobrazit informace o větru + Mostrar Informação do Vento Show Protractor @@ -18,6 +21,9 @@ Afficher le rapporteur Mostrar transportador Winkelmesser anzeigen + Szögmérő mutatása + Zobrazit úhloměr + Mostrar Transferidor \ No newline at end of file diff --git a/addons/ai/CfgAISkill.hpp b/addons/ai/CfgAISkill.hpp index dfa0299509..c01b5eb96e 100644 --- a/addons/ai/CfgAISkill.hpp +++ b/addons/ai/CfgAISkill.hpp @@ -21,7 +21,8 @@ class CfgAISkill { courage[] = {0,0, 1,0.7}; // {0,0,1,1}; endurance[] = {0,0, 1,0.7}; // {0,0,1,1}; general[] = {0,0, 1,0.9}; // {0,0,1,1}; - reloadSpeed[] = {0,0, 1,0.8}; // {0,0,1,1}; + // apparently breaks rapid firing in single fire mode for players + //reloadSpeed[] = {0,0, 1,0.8}; // {0,0,1,1}; spotDistance[] = {0,0, 1,0.9}; // {0,0.2,1,0.4}; spotTime[] = {0,0, 1,0.7}; // {0,0,1,0.7}; }; diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index 14ca7ef7cd..26a4605910 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -891,9 +891,12 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { class OpticsIn { - class WideUnstabalized - { - opticsDisplayName = "WU"; + delete Narrow; + delete Medium; + delete Wide; + + class ACE_WideUnstabilized { + opticsDisplayName = "W NS"; initAngleX = 0; minAngleX = -35; maxAngleX = 10; @@ -910,8 +913,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; }; - class Wide - { + class ACE_Wide: ACE_WideUnstabilized { opticsDisplayName = "W"; initAngleX = 0; minAngleX = -35; @@ -929,8 +931,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; }; - class Medium: Wide - { + class ACE_Medium: ACE_Wide { opticsDisplayName = "M"; initFov = 0.093; minFov = 0.093; @@ -940,8 +941,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; }; - class Narrow: Wide - { + class ACE_Narrow: ACE_Wide { opticsDisplayName = "N"; initFov = 0.029; minFov = 0.029; @@ -952,8 +952,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; }; - class Narrower: Wide - { + class ACE_Narrower: ACE_Wide { opticsDisplayName = "Z"; initFov = 0.01; minFov = 0.01; diff --git a/addons/aircraft/config.cpp b/addons/aircraft/config.cpp index 2dc390f915..2ce2d0dc10 100644 --- a/addons/aircraft/config.cpp +++ b/addons/aircraft/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - units[] = {"ACE_Comanche_Test"}; + units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index 57fecc2a44..e917ca7e9d 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -29,23 +29,25 @@ Open Cargo Door Laderampe öffnen Abrir compuerta de carga - Ourvir rampe cargo + Ourvir la rampe Otwórz drzwi ładowni Otevřít nákladní prostor Rakodórámpa nyitása Открыть грузовой отсек - Apri la porta del cargo + Apri la rampa di carico + Abrir porta de carga Close Cargo Door Laderampe schließen Cerrar compuerta de carga - Fermer rampe cargo + Fermer la rampe Zamknij drzwi ładowni Zavřít nákladní prostor Rakodórámpa zárása Закрыть грузовой отсек - Chiudi la porta del cargo + Chiudi la rampa di carico + Fechar porta de carga diff --git a/addons/apl/$PBOPREFIX$ b/addons/apl/$PBOPREFIX$ new file mode 100644 index 0000000000..f2a70e80ff --- /dev/null +++ b/addons/apl/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\apl \ No newline at end of file diff --git a/addons/apl/CfgEventHandlers.hpp b/addons/apl/CfgEventHandlers.hpp new file mode 100644 index 0000000000..5bacc02434 --- /dev/null +++ b/addons/apl/CfgEventHandlers.hpp @@ -0,0 +1,7 @@ +/* +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; +*/ \ No newline at end of file diff --git a/addons/apl/LICENSE b/addons/apl/LICENSE new file mode 100644 index 0000000000..2274430c9b --- /dev/null +++ b/addons/apl/LICENSE @@ -0,0 +1,110 @@ +ARMA PUBLIC LICENSE +https://www.bistudio.com/community/licenses/arma-public-license + +Brief summary of this Licence + +PLEASE, NOTE THAT THIS SUMMARY HAS NO LEGAL EFFECT AND IS ONLY OF AN INFORMATORY NATURE DESIGNED FOR YOU TO GET THE BASIC INFORMATION ABOUT THE CONTENT OF THIS LICENCE. THE ONLY LEGALLY BINDING PROVISIONS ARE THOSE IN THE ORIGINAL AND FULL TEXT OF THIS LICENCE. + +With this licence you are free to adapt (i.e. modify, rework or update) and share (i.e. copy, distribute or transmit) the material under the following conditions: + + Attribution - You must attribute the material in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the material). + Noncommercial - You may not use this material for any commercial purposes. + Arma Only - You may not convert or adapt this material to be used in other games than Arma. + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Arma Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 - Definitions + + Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + ArmaOnly means primarily intended for or directed towards the use in any of existing and future Arma games, including but not limited to Arma: Cold War Assault, Arma, Arma 2 and Arma 3 and its official sequels and expansion packs. + Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + Licensor means the individual(s) or entity(ies) granting rights under this Public License. + NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. + Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope + + License grant + Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + reproduce and Share the Licensed Material, in whole or in part, for NonCommercial and ArmaOnly purposes only; and + produce, reproduce, and Share Adapted Material for NonCommercial and ArmaOnly purposes only. + Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + Term. The term of this Public License is specified in Section 6(a). + Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + Downstream recipients. + Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(a)(i). + Other rights + Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + Patent and trademark rights are not licensed under this Public License. + To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial and ArmaOnly purposes. + +Section 3 – License Conditions + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + Attribution + + If You Share the Licensed Material (including in modified form), You must: + retain the following if it is supplied by the Licensor with the Licensed Material: + identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + a copyright notice; + a notice that refers to this Public License; + a notice that refers to the disclaimer of warranties; + a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(a) to the extent reasonably practicable. + If You Share Adapted Material You produce, the Adapter’s License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial and ArmaOnly purposes only; + if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. + +Section 5 – Disclaimer of Warranties and Limitation of Liability + + Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination + + This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions + + The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation + + For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +Bohemia Interactive Notices + + Bohemia Interactive a.s. is not a party to this License, and makes no warranty whatsoever in connection with the Licensed Material. Bohemia Interactive a.s. will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, Bohemia Interactive a.s. may elect to apply the Public License to material it publishes and in those instances it becomes the "Licensor". + Except for the limited purpose of indicating to the public that the Licensed Material is shared under this Public License, Bohemia Interactive a.s. does not authorize the use by either party of the trademarks "Arma", "Bohemia Interactive" or any related trademark or logo of Arma or Bohemia Interactive without the prior written consent of Bohemia Interactive a.s. diff --git a/addons/frag/functions/fnc_clearTraces.sqf b/addons/apl/XEH_preInit.sqf similarity index 50% rename from addons/frag/functions/fnc_clearTraces.sqf rename to addons/apl/XEH_preInit.sqf index b301094044..6899f59bd9 100644 --- a/addons/frag/functions/fnc_clearTraces.sqf +++ b/addons/apl/XEH_preInit.sqf @@ -1,2 +1,5 @@ -#include "script_component.hpp" -GVAR(traces) = []; \ No newline at end of file +#include "script_component.hpp" + +ADDON = false; + +ADDON = true; diff --git a/addons/apl/bodybag.p3d b/addons/apl/bodybag.p3d new file mode 100644 index 0000000000..5b3622f978 Binary files /dev/null and b/addons/apl/bodybag.p3d differ diff --git a/addons/apl/config.cpp b/addons/apl/config.cpp new file mode 100644 index 0000000000..fff902d962 --- /dev/null +++ b/addons/apl/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_main"}; + author[] = {"Bohemia Interactive"}; + authorUrl = "http://ace3mod.com"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" diff --git a/addons/medical/data/bodybag.rvmat b/addons/apl/data/bodybag.rvmat similarity index 95% rename from addons/medical/data/bodybag.rvmat rename to addons/apl/data/bodybag.rvmat index 2a1869ad55..ad84469940 100644 --- a/addons/medical/data/bodybag.rvmat +++ b/addons/apl/data/bodybag.rvmat @@ -8,7 +8,7 @@ PixelShaderID="Super"; VertexShaderID="Super"; class Stage1 { - texture="z\ace\addons\medical\data\bodybag_nohq.paa"; + texture="z\ace\addons\apl\data\bodybag_nohq.paa"; uvSource="tex"; class uvTransform { @@ -80,7 +80,7 @@ class Stage6 }; class Stage7 { - texture="z\ace\addons\medical\data\env_co.paa"; + texture="z\ace\addons\apl\data\env_co.paa"; uvSource="tex"; class uvTransform { diff --git a/addons/medical/data/bodybag_co.paa b/addons/apl/data/bodybag_co.paa similarity index 100% rename from addons/medical/data/bodybag_co.paa rename to addons/apl/data/bodybag_co.paa diff --git a/addons/medical/data/bodybag_nohq.paa b/addons/apl/data/bodybag_nohq.paa similarity index 100% rename from addons/medical/data/bodybag_nohq.paa rename to addons/apl/data/bodybag_nohq.paa diff --git a/addons/medical/data/env_co.paa b/addons/apl/data/env_co.paa similarity index 100% rename from addons/medical/data/env_co.paa rename to addons/apl/data/env_co.paa diff --git a/addons/apl/functions/script_component.hpp b/addons/apl/functions/script_component.hpp new file mode 100644 index 0000000000..a25cdfebcc --- /dev/null +++ b/addons/apl/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\apl\script_component.hpp" \ No newline at end of file diff --git a/addons/apl/script_component.hpp b/addons/apl/script_component.hpp new file mode 100644 index 0000000000..ac20a25e21 --- /dev/null +++ b/addons/apl/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT APL +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_APL + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_APL + #define DEBUG_SETTINGS DEBUG_SETTINGS_APL +#endif + +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/atragmx/$PBOPREFIX$ b/addons/atragmx/$PBOPREFIX$ new file mode 100644 index 0000000000..c42e89e22d --- /dev/null +++ b/addons/atragmx/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\atragmx \ No newline at end of file diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 4ae08c20aa..cefc7a26eb 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -142,6 +142,7 @@ class ATragMX_Display { name="ATragMX_Display"; idd=-1; onLoad="uiNamespace setVariable ['ATragMX_Display', (_this select 0)]"; + onUnload=QUOTE(_this call FUNC(on_close_dialog)); movingEnable=1; controlsBackground[]={}; objects[]={}; diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index e2e3cb254c..1e86838b8b 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -19,7 +19,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == [".338LM 250gr" , 880, 100, 0.0598, -0.0006060, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"], [".338LM 300gr" , 800, 100, 0.0677, -0.0005350, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"], - [".338LM API526" , 880, 100, 0.0601, -0.0006730, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.290, 7, "ICAO"], + [".338LM API526" , 895, 100, 0.0601, -0.0006730, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.560, 1, "ASM" ], [".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0008300, 3.81, 0, 2, 10, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"], [".300WM Mk248 Mod 1", 867, 100, 0.0611, -0.0008150, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"], @@ -28,8 +28,9 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ["7.62x54mmR" , 800, 100, 0.0692, -0.0010230, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"], ["7.62x51mm M80" , 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"], - ["7.62x51mm M118LR" , 820, 100, 0.0662, -0.0008525, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"], - ["7.62x51mm Mk319" , 820, 100, 0.0670, -0.0010300, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"], + ["7.62x51mm M118LR" , 780, 100, 0.0710, -0.0008525, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"], + ["7.62x51mm Mk319" , 910, 100, 0.0585, -0.0010300, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"], + ["7.62x51mm M993" , 930, 100, 0.0585, -0.0010300, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO"], ["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004910, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"], ["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"], @@ -38,7 +39,8 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ["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" ], - ["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ]]; + ["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ], + ["5.56x45mm M995" , 869, 100, 0.0616, -0.0011200, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" ]]; [] call FUNC(clear_user_data); profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; diff --git a/addons/atragmx/XEH_preInit.sqf b/addons/atragmx/XEH_preInit.sqf index 6ec288b9c7..62bf2181c7 100644 --- a/addons/atragmx/XEH_preInit.sqf +++ b/addons/atragmx/XEH_preInit.sqf @@ -68,5 +68,6 @@ PREP(update_target_data); PREP(update_target_selection); PREP(update_unit_selection); PREP(update_zero_range); +PREP(on_close_dialog); ADDON = true; diff --git a/addons/atragmx/functions/fnc_calculate_range_card.sqf b/addons/atragmx/functions/fnc_calculate_range_card.sqf index cfaf7441f8..5d5253d1bf 100644 --- a/addons/atragmx/functions/fnc_calculate_range_card.sqf +++ b/addons/atragmx/functions/fnc_calculate_range_card.sqf @@ -52,11 +52,11 @@ if (!GVAR(atmosphereModeTBH)) then { }; private ["_bulletLength", "_stabilityFactor"]; -_bulletLength = 1.8; +_bulletLength = 45.72; _stabilityFactor = 1.5; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then { - _stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor); + _stabilityFactor = [_bulletDiameter, _bulletLength, _bulletMass, _barrelTwist * 10, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor); }; }; diff --git a/addons/atragmx/functions/fnc_calculate_target_solution.sqf b/addons/atragmx/functions/fnc_calculate_target_solution.sqf index 677c4bb793..2be1197a9b 100644 --- a/addons/atragmx/functions/fnc_calculate_target_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_solution.sqf @@ -52,11 +52,11 @@ if (!GVAR(atmosphereModeTBH)) then { }; private ["_bulletLength", "_stabilityFactor"]; -_bulletLength = 1.8; +_bulletLength = 45.72; _stabilityFactor = 1.5; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then { - _stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor); + _stabilityFactor = [_bulletDiameter, _bulletLength, _bulletMass, _barrelTwist * 10, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor); }; }; diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 09e413d535..6951137577 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" -//if (dialog) exitWith { false }; +if (GVAR(active)) exitWith { false }; if (underwater ACE_player) exitWith { false }; if (!("ACE_ATragMX" in (uniformItems ACE_player)) && !("ACE_ATragMX" in (vestItems ACE_player))) exitWith { false }; @@ -47,4 +47,6 @@ GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer); lbAdd [6000, _x select 0]; } forEach GVAR(gunList); +GVAR(active) = true; + true diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index e4fe1b67a4..30b17ebf90 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -15,6 +15,8 @@ */ #include "script_component.hpp" +GVAR(active) = false; + GVAR(workingMemory) = +(GVAR(gunList) select 0); GVAR(scopeUnits) = ["MILs", "TMOA", "SMOA", "Clicks"]; diff --git a/addons/atragmx/functions/fnc_on_close_dialog.sqf b/addons/atragmx/functions/fnc_on_close_dialog.sqf new file mode 100644 index 0000000000..32ba4e4c43 --- /dev/null +++ b/addons/atragmx/functions/fnc_on_close_dialog.sqf @@ -0,0 +1,4 @@ +#include "script_component.hpp" + +uiNamespace setVariable ['ATragMX_Display', nil]; +GVAR(active) = false; \ No newline at end of file diff --git a/addons/atragmx/initKeybinds.sqf b/addons/atragmx/initKeybinds.sqf index d8a69a09e3..8bc37752f3 100644 --- a/addons/atragmx/initKeybinds.sqf +++ b/addons/atragmx/initKeybinds.sqf @@ -1,8 +1,8 @@ -["ACE3", QGVAR(ATragMXDialogKey), localize "STR_ACE_ATragMX_ATragMXDialogKey", +["ACE3 Equipment", QGVAR(ATragMXDialogKey), localize "STR_ACE_ATragMX_ATragMXDialogKey", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; - + if (GVAR(active)) exitWith {false}; // Statement [] call FUNC(create_dialog); false diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index c201925147..585070d401 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.3 +#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.5 diff --git a/addons/atragmx/stringtable.xml b/addons/atragmx/stringtable.xml index f3825c405a..fce50a4e1d 100644 --- a/addons/atragmx/stringtable.xml +++ b/addons/atragmx/stringtable.xml @@ -20,6 +20,10 @@ Abrir ATragMX Ouvrir ATragMX ATragMX öffnen + Apri ATragMX + ATragMX elővétele + Otevřít ATragMX + Abrir ATragMX Rugged PDA with ATragMX @@ -27,6 +31,11 @@ Защищенный КПК с ATragMX PDA rugerizada con ATragMX Robuster PDA mit ATragMX + PDA avec ATragMX + PDA Robusto con ATragMX + Megerősített PDA, ATragMX-el + PDA s ATragMX + PDA Robusto com ATragMX Open ATragMX @@ -35,6 +44,10 @@ Abrir ATragMX Ouvrir ATragMX ATragMX öffnen + Apri ATragMX + ATragMX elővétele + Otevřít ATragMX + Abrir ATragMX - + \ No newline at end of file diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 70ed9666b4..01e07c4096 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -8,7 +8,7 @@ Przyczep przedmiot >> Attacher l'objet >> Připnout předmět >> - Acoplar item >> + Fixar item >> Attacca l'oggetto >> Tárgy hozzácsatolása >> Прикрепить предмет @@ -20,7 +20,7 @@ Przyczep Attacher Připnout - Acoplar + Fixar Attacca Hozzácsatolás Прикрепить @@ -44,7 +44,7 @@ Przyczepiono stroboskop IR Balise IR attachée IR Značkovač připnutý - Marcador IV Acoplado + Marcador IV Fixado Strobo IR attaccata Infravörös jeladó hozzácsatolva ИК-маяк прикреплён @@ -68,7 +68,7 @@ Przyczepiono granat IR Grenade IR attachée IR Granát připnutý - Granada IV Acoplada + Granada IV Fixada Granata IR attaccata Infravörös gránát hozzácsatolva ИК-граната прикреплена @@ -92,7 +92,7 @@ Przyczepiono światło chemiczne Chemlight attachée Chemické světlo připnuto - Chemlight Acoplada + Chemlight Fixada Chemlight attaccata Chemlight hozzácsatolva Химсвет прикреплён @@ -176,8 +176,10 @@ Не удалось присоединить Error al acoplar Připnutí selhalo + Erro ao fixar Przyczepianie nie powiodło się Hozzácsatolás sikertelen + Non si attacca %1<br/>Attached @@ -186,7 +188,7 @@ %1<br/>przyczepiono %1<br/>attachée %1<br/>Připnutý - %1<br/>Acoplada + %1<br/>Fixada %1<br/>attaccata %1<br/>hozzácsatolva %1<br/>присоединен(-а) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 02df51e891..3ab265091e 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -25,16 +25,16 @@ class CfgAmmo { 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; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class ACE_556x45_Ball_Mk262 : B_556x45_Ball { airFriction=-0.001125; @@ -42,16 +42,16 @@ class CfgAmmo { deflecting=18; hit=11; typicalSpeed=836; - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class ACE_556x45_Ball_Mk318 : B_556x45_Ball { airFriction=-0.001120; @@ -59,33 +59,33 @@ class CfgAmmo { deflecting=18; hit=9; typicalSpeed=886; - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; 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=46; + typicalSpeed=869; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.5359237; 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_ballisticCoefficients[]={0.310}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; - ACE_dragModel=7; - ACE_muzzleVelocities[]={950, 1030, 1040}; - ACE_barrelLengths[]={10, 15.5, 20}; + ACE_dragModel=1; + ACE_muzzleVelocities[]={820, 865, 880}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class B_556x45_Ball_Tracer_Red; class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red { @@ -97,16 +97,16 @@ class CfgAmmo { deflecting=18; hit=7; typicalSpeed=880; - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={780, 880, 920}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_556x45_Ball_Tracer_Green; class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green { @@ -117,30 +117,30 @@ class CfgAmmo { 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; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_65x39_Caseless : BulletBase { airFriction=-0.000785; typicalSpeed=800; - ACE_caliber=0.264; - ACE_bulletLength=1.295; - ACE_bulletMass=123; + ACE_caliber=6.706; + ACE_bulletLength=32.893; + ACE_bulletMass=7.9704; 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.263}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={730, 760, 788, 800, 810, 830}; - ACE_barrelLengths[]={10, 16, 20, 24, 26, 30}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4, 762.0}; }; class B_65x39_Case_yellow; class ACE_65x39_Caseless_Tracer_Dim : B_65x39_Case_yellow { @@ -154,31 +154,31 @@ class CfgAmmo { airFriction=-0.00078; typicalSpeed=820 ; caliber=0.9; - ACE_caliber=0.264; - ACE_bulletLength=1.364; - ACE_bulletMass=139; + ACE_caliber=6.706; + ACE_bulletLength=34.646; + ACE_bulletMass=9.0072; 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.290}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={730, 760, 790, 820, 830}; - ACE_barrelLengths[]={10, 16, 20, 24, 26}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class ACE_65_Creedmor_Ball: B_65x39_Caseless { airFriction=-0.000651; typicalSpeed=860 ; caliber=1.1; - ACE_caliber=0.264; - ACE_bulletLength=1.426; - ACE_bulletMass=140; + ACE_caliber=6.706; + ACE_bulletLength=36.22; + ACE_bulletMass=9.072; 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, 820, 840, 852, 860}; - ACE_barrelLengths[]={10, 16, 20, 24, 26}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class B_762x51_Ball : BulletBase { airFriction=-0.001035; @@ -186,16 +186,16 @@ class CfgAmmo { 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; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class B_762x51_Tracer_Yellow; class ACE_B_762x51_Tracer_Dim: B_762x51_Tracer_Yellow { @@ -206,206 +206,206 @@ class CfgAmmo { caliber=1.8; hit=16; typicalSpeed=790; - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.243}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={750, 780, 790, 794}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; 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_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball { airFriction=-0.00103; caliber=1.5; hit=14; typicalSpeed=900; - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=130; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=8.424; 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}; + ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; 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; + typicalSpeed=910; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=8.22946157; 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_ballisticCoefficients[]={0.359}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={875, 910, 930}; - ACE_barrelLengths[]={13, 16, 20}; + ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; class ACE_762x51_Ball_Subsonic : B_762x51_Ball { airFriction=-0.000535; caliber=1; hit=6; typicalSpeed=320; - ACE_caliber=0.308; - ACE_bulletLength=1.340; - ACE_bulletMass=200; + ACE_caliber=7.823; + ACE_bulletLength=34.036; + ACE_bulletMass=12.96; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_30_06_M1_Ball : B_762x51_Ball { airFriction=-0.0009; typicalSpeed=800; caliber=2.0; hit=10; - ACE_caliber=0.308; - ACE_bulletLength=1.21; - ACE_bulletMass=174; + ACE_caliber=7.823; + ACE_bulletLength=30.734; + ACE_bulletMass=11.2752; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class ACE_7_Remington_Magnum_Ball : B_762x51_Ball { airFriction=-0.0008; typicalSpeed=820; caliber=2.1; hit=8; - ACE_caliber=0.284; - ACE_bulletLength=1.529; - ACE_bulletMass=180; + ACE_caliber=7.214; + ACE_bulletLength=38.837; + ACE_bulletMass=11.664; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class ACE_243_Winchester_Ball : B_762x51_Ball { airFriction=-0.00095; typicalSpeed=915; caliber=2.3; hit=6; - ACE_caliber=0.243; - ACE_bulletLength=1.282; - ACE_bulletMass=180; + ACE_caliber=6.172; + ACE_bulletLength=32.563; + ACE_bulletMass=11.664; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { airFriction=-0.000830; caliber=1.8; hit=17; typicalSpeed=900; - ACE_caliber=0.308; - ACE_bulletLength=1.353; - ACE_bulletMass=190; + ACE_caliber=7.823; + ACE_bulletLength=34.366; + ACE_bulletMass=12.312; 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.268}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={865, 900, 924}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball { airFriction=-0.000815; caliber=1.9; hit=18; typicalSpeed=867; - ACE_caliber=0.308; - ACE_bulletLength=1.489; - ACE_bulletMass=220; + ACE_caliber=7.823; + ACE_bulletLength=37.821; + ACE_bulletMass=14.256; 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.310}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={847, 867, 877}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball { airFriction=-0.00076; caliber=2.0; hit=19; typicalSpeed=853; - ACE_caliber=0.308; - ACE_bulletLength=1.602; - ACE_bulletMass=230; + ACE_caliber=7.823; + ACE_bulletLength=40.691; + ACE_bulletMass=14.904; 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.368}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={800, 853, 884}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_762x54_Ball: B_762x51_Ball { airFriction=-0.001023; typicalSpeed=820; - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x54_Ball_7N14 : B_762x51_Ball { airFriction=-0.001023; caliber=1.5; hit=15; typicalSpeed=820; - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class B_762x54_Tracer_Green; class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green { @@ -415,48 +415,48 @@ class CfgAmmo { 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; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x35_Ball : B_762x51_Ball { airFriction=-0.000821; caliber=1.5; hit=11; typicalSpeed=790; - ACE_caliber=0.308; - ACE_bulletLength=1.153; - ACE_bulletMass=125; + ACE_caliber=7.823; + ACE_bulletLength=29.286; + ACE_bulletMass=8.1; 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[]={620, 655, 675}; - ACE_barrelLengths[]={9, 16, 20}; + ACE_barrelLengths[]={228.6, 406.4, 508.0}; }; 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; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class ACE_762x39_Ball_57N231P : B_762x54_Tracer_Green { airFriction=-0.0015168; @@ -465,128 +465,128 @@ class CfgAmmo { 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; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.5816; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_9x21_Ball : BulletBase { airFriction=-0.00125; typicalSpeed=390; hit=6; - ACE_caliber=0.356; - ACE_bulletLength=0.610; - ACE_bulletMass=115; + ACE_caliber=9.042; + ACE_bulletLength=15.494; + ACE_bulletMass=7.452; 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.17}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={440, 460, 480}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class ACE_9x18_Ball_57N181S : B_9x21_Ball { hit=5; airFriction=-0.001234; typicalSpeed=298; - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class ACE_9x19_Ball : B_9x21_Ball { airFriction=-0.001234; typicalSpeed=370; hit=6; - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class ACE_10x25_Ball : B_9x21_Ball { airFriction=-0.00168; typicalSpeed=425; hit=7; - ACE_caliber=0.5; - ACE_bulletLength=0.764; - ACE_bulletMass=165; + ACE_caliber=12.7; + ACE_bulletLength=19.406; + ACE_bulletMass=10.692; 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="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={360, 400, 430}; - ACE_barrelLengths[]={4, 4.61, 9}; + ACE_barrelLengths[]={101.6, 117.094, 228.6}; }; class ACE_765x17_Ball: B_9x21_Ball { airFriction=-0.001213; typicalSpeed=282; hit=7; - ACE_caliber=0.3125; - ACE_bulletLength=0.610; - ACE_bulletMass=65; + ACE_caliber=7.938; + ACE_bulletLength=15.494; + ACE_bulletMass=4.212; 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.118}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={282, 300, 320}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; 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; + ACE_caliber=7.899; + ACE_bulletLength=31.166; + ACE_bulletMass=11.2752; 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}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_93x64_Ball : BulletBase { airFriction=-0.00106; typicalSpeed=880; - ACE_caliber=0.366; - ACE_bulletLength=1.350; - ACE_bulletMass=230; + ACE_caliber=9.296; + ACE_bulletLength=34.29; + ACE_bulletMass=14.904; 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.368}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={850, 870, 880}; - ACE_barrelLengths[]={20, 24.41, 26}; + ACE_barrelLengths[]={508.0, 620.014, 660.4}; }; class B_408_Ball : BulletBase { timeToLive=10; airFriction=-0.000395; typicalSpeed=910; - ACE_caliber=0.408; - ACE_bulletLength=2.126; - ACE_bulletMass=410; + ACE_caliber=10.363; + ACE_bulletLength=54.0; + ACE_bulletMass=26.568; ACE_transonicStabilityCoef=1; 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.97}; @@ -594,109 +594,109 @@ class CfgAmmo { ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={910}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class ACE_106x83mm_Ball : B_408_Ball { timeToLive=10; - ACE_caliber=0.416; - ACE_bulletLength=2.089; - ACE_bulletMass=398; + ACE_caliber=10.566; + ACE_bulletLength=53.061; + ACE_bulletMass=25.7904; 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.72}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={960}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class B_338_Ball : BulletBase { timeToLive=10; airFriction=-0.000606; typicalSpeed=915; - ACE_caliber=0.338; - ACE_bulletLength=1.558; - ACE_bulletMass=250; + ACE_caliber=8.585; + ACE_bulletLength=39.573; + ACE_bulletMass=16.2; 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.322}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={880, 915, 925}; - ACE_barrelLengths[]={20, 26, 28}; + ACE_barrelLengths[]={508.0, 660.4, 711.2}; }; class B_338_NM_Ball : BulletBase { airFriction=-0.000537; typicalSpeed=820; - ACE_caliber=0.338; - ACE_bulletLength=1.70; - ACE_bulletMass=300; + ACE_caliber=8.585; + ACE_bulletLength=43.18; + ACE_bulletMass=19.44; 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.381}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={790, 807, 820}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class ACE_338_Ball : B_338_Ball { timeToLive=10; airFriction=-0.000535; typicalSpeed=826; - ACE_caliber=0.338; - ACE_bulletLength=1.70; - ACE_bulletMass=300; + ACE_caliber=8.585; + ACE_bulletLength=43.18; + ACE_bulletMass=19.44; 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.381}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={800, 820, 826, 830}; - ACE_barrelLengths[]={20, 24, 26.5, 28}; + ACE_barrelLengths[]={508.0, 609.6, 673.1, 711.2}; }; class ACE_338_Ball_API526 : B_338_Ball { timeToLive=10; airFriction=-0.000673; caliber=2.8; - typicalSpeed=826; - ACE_caliber=0.338; - ACE_bulletLength=1.535; - ACE_bulletMass=253; + typicalSpeed=895; + ACE_caliber=8.585; + ACE_bulletLength=38.989; + ACE_bulletMass=16.3941242; 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.290}; + ACE_ballisticCoefficients[]={0.560}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; - ACE_dragModel=7; + ACE_dragModel=1; ACE_muzzleVelocities[]={880, 915, 925}; - ACE_barrelLengths[]={20, 26, 28}; + ACE_barrelLengths[]={508.0, 660.4, 711.2}; }; class B_127x54_Ball : BulletBase { airFriction=-0.00014; typicalSpeed=300; - ACE_caliber=0.510; - ACE_bulletLength=2.540; - ACE_bulletMass=750; + ACE_caliber=12.954; + ACE_bulletLength=64.516; + ACE_bulletMass=48.6; 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[]={1.050}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={300}; - ACE_barrelLengths[]={17.2}; + ACE_barrelLengths[]={436.88}; }; class B_127x99_Ball : BulletBase { timeToLive=10; airFriction=-0.0006; typicalSpeed=900; - ACE_caliber=0.510; - ACE_bulletLength=2.310; - ACE_bulletMass=647; + ACE_caliber=12.954; + ACE_bulletLength=58.674; + ACE_bulletMass=41.9256; 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}; + ACE_barrelLengths[]={736.6}; }; class ACE_127x99_API : BulletBase { timeToLive=10; @@ -704,60 +704,60 @@ class CfgAmmo { typicalSpeed=900; hit=25; caliber=4.0; - ACE_caliber=0.510; - ACE_bulletLength=2.310; - ACE_bulletMass=648; + ACE_caliber=12.954; + ACE_bulletLength=58.674; + ACE_bulletMass=41.9904; 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}; + ACE_barrelLengths[]={736.6}; }; 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; + ACE_caliber=12.954; + ACE_bulletLength=64.516; + ACE_bulletMass=48.6; 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.050}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={860}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class B_127x108_Ball : BulletBase { timeToLive=10; airFriction=-0.00064; typicalSpeed=820; - ACE_caliber=0.511; - ACE_bulletLength=2.520; - ACE_bulletMass=745; + ACE_caliber=12.979; + ACE_bulletLength=64.008; + ACE_bulletMass=48.276; 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.63}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={820}; - ACE_barrelLengths[]={28.7}; + ACE_barrelLengths[]={728.98}; }; class B_45ACP_Ball : BulletBase { airFriction=-0.0007182; typicalSpeed=250; - ACE_caliber=0.452; - ACE_bulletLength=0.68; - ACE_bulletMass=230; + ACE_caliber=11.481; + ACE_bulletLength=17.272; + ACE_bulletMass=14.904; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; }; diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp index 9ead13c962..32121e4e87 100644 --- a/addons/ballistics/CfgMagazines.hpp +++ b/addons/ballistics/CfgMagazines.hpp @@ -322,13 +322,14 @@ class CfgMagazines { class 10Rnd_762x54_Mag: 10Rnd_762x51_Mag { initSpeed = 800; }; - class ACE_10Rnd_762x54_Tracer_mag: 16Rnd_9x21_Mag { + class ACE_10Rnd_762x54_Tracer_mag: 10Rnd_762x54_Mag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_762x54_Ball_7T2"; displayName = "$STR_ACE_10Rnd_762x54_Tracer_mag_Name"; displayNameShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_NameShort"; descriptionShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_Description"; initSpeed = 800; + tracersEvery = 1; }; class 150Rnd_762x54_Box: 150Rnd_762x51_Box { diff --git a/addons/ballistics/CfgVehicles.hpp b/addons/ballistics/CfgVehicles.hpp index c43782d024..82e7fef5e3 100644 --- a/addons/ballistics/CfgVehicles.hpp +++ b/addons/ballistics/CfgVehicles.hpp @@ -42,6 +42,7 @@ class CfgVehicles { 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,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); @@ -59,6 +60,7 @@ class CfgVehicles { 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,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); @@ -82,6 +84,7 @@ class CfgVehicles { 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,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); }; }; @@ -200,6 +203,7 @@ class CfgVehicles { 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,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_1_Mag,4); diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index 7e647d2605..571112697a 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -1,16 +1,13 @@ +class Single; +class Burst; +class FullAuto; class Mode_SemiAuto; +class Mode_Burst; class Mode_FullAuto; class CfgWeapons { - class DMR_02_base_F; - class DMR_03_base_F; - class DMR_04_base_F; - class DMR_05_base_F; - class DMR_06_base_F; - class GM6_base_F; class LMG_RCWS; - class LRR_base_F; class MGun; class MGunCore; class MMG_01_base_F; @@ -22,19 +19,83 @@ class CfgWeapons { /* Long Rifles */ + class GM6_base_F: Rifle_Long_Base_F { + class Single: Mode_SemiAuto { + dispersion = 0.00029; // radians. Equal to 1.00 MOA. + }; + }; + + class LRR_base_F: Rifle_Long_Base_F { + class Single: Mode_SemiAuto { + dispersion = 0.00020; // radians. Equal to 0.70 MOA. + }; + }; + + class DMR_06_base_F: Rifle_Long_Base_F { + class Single: Mode_SemiAuto { + dispersion = 0.00029; // radians. Equal to 1.00 MOA. + }; + + class FullAuto: Mode_FullAuto { + dispersion = 0.00029; // radians. Equal to 1.00 MOA. + }; + }; + + class DMR_05_base_F: Rifle_Long_Base_F { + class Single: Mode_SemiAuto { + dispersion = 0.00029; // radians. Equal to 1.00 MOA. + }; + + class FullAuto: Mode_FullAuto { + dispersion = 0.00029; // radians. Equal to 1.00 MOA. + }; + }; + + class DMR_04_base_F: Rifle_Long_Base_F { + class Single: Mode_SemiAuto { + dispersion = 0.00029; // radians. Equal to 1.00 MOA. + }; + }; + + class DMR_03_base_F: Rifle_Long_Base_F { + class Single: Mode_SemiAuto { + dispersion = 0.00032; // radians. Equal to 1.10 MOA. + }; + + class FullAuto: Mode_FullAuto { + dispersion = 0.00032; // radians. Equal to 1.10 MOA. + }; + }; + + class DMR_02_base_F: Rifle_Long_Base_F { + class Single: Mode_SemiAuto { + dispersion = 0.000262; // radians. Equal to 0.90 MOA. + }; + }; + + class DMR_01_base_F: Rifle_Long_Base_F { + class WeaponSlotsInfo: WeaponSlotsInfo { + class MuzzleSlot: MuzzleSlot { + compatibleItems[] += {"ACE_muzzle_mzls_B"}; + }; + }; + class Single: Mode_SemiAuto { + dispersion = 0.0004; // radians. Equal to 1.375 MOA. + }; + }; + class EBR_base_F: Rifle_Long_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_B"}; }; }; - }; - - class DMR_01_base_F: Rifle_Long_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: MuzzleSlot { - compatibleItems[] += {"ACE_muzzle_mzls_B"}; - }; + class Single: Mode_SemiAuto { + dispersion = 0.00029; // radians. Equal to 1.00 MOA. + }; + + class FullAuto: Mode_FullAuto { + dispersion = 0.00029; // radians. Equal to 1.00 MOA. }; }; @@ -46,14 +107,6 @@ class CfgWeapons { compatibleItems[] += {"ACE_muzzle_mzls_H"}; }; }; - class Single: Mode_SemiAuto { - dispersion = 0.000800; // radians. Equal to 2.75 MOA. - // Based on widely cited 2 MOA figure for new 5.56 ACR. - }; - - class FullAuto: Mode_FullAuto { - dispersion = 0.00147; // radians. Equal to 5.1 MOA. - }; }; class arifle_MX_SW_F: arifle_MX_Base_F { magazines[] = { @@ -65,8 +118,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -1.0; - ACE_barrelTwist=9; - ACE_barrelLength=16.0; + ACE_barrelTwist=228.6; + ACE_barrelLength=406.4; class WeaponSlotsInfo: WeaponSlotsInfo { class MuzzleSlot: MuzzleSlot { // Shit is broken again @@ -74,14 +127,6 @@ class CfgWeapons { compatibleItems[] = {"muzzle_snds_H","muzzle_snds_H_SW","ACE_muzzle_mzls_H"}; }; }; - class Single: Mode_SemiAuto { - dispersion = 0.000800; // radians. Equal to 2.75 MOA. - // Based on widely cited 2 MOA figure for new 5.56 ACR. - }; - - class manual: FullAuto { - dispersion = 0.00147; // radians. Equal to 5.1 MOA. - }; }; class arifle_MXM_F: arifle_MX_Base_F { magazines[] = { @@ -92,15 +137,14 @@ class CfgWeapons { "ACE_30Rnd_65_Creedmor_mag" }; initSpeed = -1.018; - ACE_barrelTwist=9; - ACE_barrelLength=18; + ACE_barrelTwist=228.6; + ACE_barrelLength=457.2; class Single: Single { - dispersion = 0.00029; // radians. Equal to 1 MOA. - // 6.5mm is easily capable of this in a half-tuned rifle. + dispersion = 0.000436; // radians. Equal to 1.50 MOA. }; class FullAuto: FullAuto { - dispersion = 0.000800; // radians. Equal to 2.75 MOA. + dispersion = 0.000436; // radians. Equal to 1.50 MOA. }; }; @@ -112,15 +156,6 @@ class CfgWeapons { compatibleItems[] += {"ACE_muzzle_mzls_H"}; }; }; - class Single: Mode_SemiAuto { - dispersion = 0.000800; // radians. Equal to 2.75 MOA. - // Based on widely cited 2 MOA figure for new 5.56 ACR? - // Use your imagination for fictional weapons! - }; - - class FullAuto: Mode_FullAuto { - dispersion = 0.00147; // radians. Equal to 5.1 MOA. - }; }; @@ -137,15 +172,8 @@ class CfgWeapons { compatibleItems[] += {"ACE_muzzle_mzls_H"}; }; }; - ACE_barrelTwist=7; - ACE_barrelLength=12.5; - class manual: Mode_FullAuto { - dispersion = 0.00175; // radians. Equal to 6 MOA. - }; - - class Single: manual { - dispersion = 0.00175; // radians. Equal to 6 MOA. - }; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; class LMG_Zafir_F: Rifle_Long_Base_F { initSpeed = -1.0; @@ -154,15 +182,8 @@ class CfgWeapons { compatibleItems[] += {"ACE_muzzle_mzls_B"}; }; }; - ACE_barrelTwist=12; - ACE_barrelLength=18.1; - class FullAuto: Mode_FullAuto { - dispersion = 0.00175; // radians. Equal to 6 MOA. - }; - - class Single: Mode_SemiAuto { - dispersion = 0.00175; // radians. Equal to 6 MOA. - }; + ACE_barrelTwist=304.8; + ACE_barrelLength=459.74; }; @@ -173,13 +194,6 @@ class CfgWeapons { compatibleItems[] += {"ACE_muzzle_mzls_L"}; }; }; - class Single: Mode_SemiAuto { - dispersion = 0.000727; // radians. Equal to 2.5 MOA, about the limit of mass-produced M855. - }; - - class FullAuto: Mode_FullAuto { - dispersion = 0.00147; // radians. Equal to 5.1 MOA. - }; }; class mk20_base_F: Rifle_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { @@ -187,14 +201,6 @@ class CfgWeapons { compatibleItems[] += {"ACE_muzzle_mzls_L"}; }; }; - class Single: Mode_SemiAuto { - dispersion = 0.0008727; // radians. Equal to 3 MOA, about the limit of mass-produced M855 plus - // some extra for these worn out Greek Army service rifles. - }; - - class FullAuto: Mode_FullAuto { - dispersion = 0.00147; // radians. Equal to 5.1 MOA. - }; }; @@ -202,12 +208,15 @@ class CfgWeapons { class SDAR_base_F: Rifle_Base_F { initSpeed = -0.989; class Single: Mode_SemiAuto { - dispersion = 0.0008727; // radians. Equal to 3 MOA, about the limit of mass-produced M855 plus - // some extra because Kel-Tec. + dispersion = 0.0008727; // radians. Equal to 3 MOA. }; + class Burst: Mode_Burst { + dispersion = 0.0008727; // radians. Equal to 3 MOA. + }; + class FullAuto: Mode_FullAuto { - dispersion = 0.00147; // radians. Equal to 5.1 MOA. + dispersion = 0.0008727; // radians. Equal to 3 MOA. }; }; class pdw2000_base_F: Rifle_Base_F { @@ -241,8 +250,8 @@ class CfgWeapons { class hgun_P07_F: Pistol_Base_F { initSpeed = -0.9778; - ACE_barrelTwist=10; - ACE_barrelLength=4; + ACE_barrelTwist=254.0; + ACE_barrelLength=101.6; class WeaponSlotsInfo: WeaponSlotsInfo { class MuzzleSlot: MuzzleSlot { linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE"; @@ -253,8 +262,8 @@ class CfgWeapons { class hgun_Rook40_F: Pistol_Base_F { initSpeed = -1.0; - ACE_barrelTwist=10; - ACE_barrelLength=4.4; + ACE_barrelTwist=254.0; + ACE_barrelLength=111.76; class WeaponSlotsInfo: WeaponSlotsInfo { class MuzzleSlot: MuzzleSlot { linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE"; @@ -265,8 +274,8 @@ class CfgWeapons { class hgun_ACPC2_F: Pistol_Base_F { initSpeed = -1.0; - ACE_barrelTwist=16; - ACE_barrelLength=5; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.0; class WeaponSlotsInfo: WeaponSlotsInfo { class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_smg_01"}; @@ -276,8 +285,8 @@ class CfgWeapons { class hgun_Pistol_heavy_01_F: Pistol_Base_F { initSpeed = -0.96; - ACE_barrelTwist=16; - ACE_barrelLength=4.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=114.3; class WeaponSlotsInfo: WeaponSlotsInfo { class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_smg_01"}; @@ -287,8 +296,8 @@ class CfgWeapons { class hgun_Pistol_heavy_02_F: Pistol_Base_F { initSpeed = -0.92; - ACE_barrelTwist=16; - ACE_barrelLength=3; + ACE_barrelTwist=406.4; + ACE_barrelLength=76.2; /* class WeaponSlotsInfo: WeaponSlotsInfo { class MuzzleSlot { @@ -300,8 +309,8 @@ class CfgWeapons { }; class hgun_PDW2000_F: pdw2000_base_F { initSpeed = -1.157; - ACE_barrelTwist=9; - ACE_barrelLength=7; + ACE_barrelTwist=228.6; + ACE_barrelLength=177.8; }; class arifle_Katiba_F: arifle_katiba_Base_F { magazines[] = { @@ -310,8 +319,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" }; initSpeed = -1.08; - ACE_barrelTwist=8; - ACE_barrelLength=28.7; + ACE_barrelTwist=203.2; + ACE_barrelLength=728.98; }; class arifle_Katiba_C_F: arifle_katiba_Base_F { magazines[] = { @@ -320,8 +329,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" }; initSpeed = -1.07; - ACE_barrelTwist=8; - ACE_barrelLength=26.8; + ACE_barrelTwist=203.2; + ACE_barrelLength=680.72; }; class arifle_Katiba_GL_F: arifle_katiba_Base_F { magazines[] = { @@ -330,8 +339,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" }; initSpeed = -1.08; - ACE_barrelTwist=8; - ACE_barrelLength=28.7; + ACE_barrelTwist=203.2; + ACE_barrelLength=728.98; }; class arifle_MX_F: arifle_MX_Base_F { magazines[] = { @@ -340,8 +349,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -0.99; - ACE_barrelTwist=9; - ACE_barrelLength=14.5; + ACE_barrelTwist=228.6; + ACE_barrelLength=368.3; }; class arifle_MX_GL_F: arifle_MX_Base_F { magazines[] = { @@ -350,13 +359,13 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -0.99; - ACE_barrelTwist=9; - ACE_barrelLength=14.5; + ACE_barrelTwist=228.6; + ACE_barrelLength=368.3; }; /* class arifle_MX_SW_F: arifle_MX_Base_F { - ACE_barrelTwist=9; - ACE_barrelLength=16.0; + ACE_barrelTwist=228.6; + ACE_barrelLength=406.4; }; */ class arifle_MXC_F: arifle_MX_Base_F { @@ -366,13 +375,13 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -0.965; - ACE_barrelTwist=8; - ACE_barrelLength=10.5; + ACE_barrelTwist=203.2; + ACE_barrelLength=266.7; }; /* class arifle_MXM_F: arifle_MX_Base_F { - ACE_barrelTwist=9; - ACE_barrelLength=18; + ACE_barrelTwist=228.6; + ACE_barrelLength=457.2; }; */ class arifle_SDAR_F: SDAR_base_F { @@ -388,13 +397,13 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.989; - ACE_barrelTwist=11.25; - ACE_barrelLength=18; + ACE_barrelTwist=285.75; + ACE_barrelLength=457.2; }; class SMG_02_F: SMG_02_base_F { initSpeed = -1.054; - ACE_barrelTwist=10; - ACE_barrelLength=7.7; + ACE_barrelTwist=254.0; + ACE_barrelLength=195.58; }; class arifle_TRG20_F: Tavor_base_F { magazines[] = { @@ -408,8 +417,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.95; - ACE_barrelTwist=7; - ACE_barrelLength=15; + ACE_barrelTwist=177.8; + ACE_barrelLength=381.0; }; class arifle_TRG21_F: Tavor_base_F { magazines[] = { @@ -423,8 +432,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.989; - ACE_barrelTwist=7; - ACE_barrelLength=18.1; + ACE_barrelTwist=177.8; + ACE_barrelLength=459.74; }; class arifle_TRG21_GL_F: arifle_TRG21_F { magazines[] = { @@ -438,13 +447,13 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.989; - ACE_barrelTwist=7; - ACE_barrelLength=18.1; + ACE_barrelTwist=177.8; + ACE_barrelLength=459.74; }; /* class LMG_Zafir_F: Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=18.1; + ACE_barrelTwist=304.8; + ACE_barrelLength=459.74; }; */ class arifle_Mk20_F: mk20_base_F { @@ -459,8 +468,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.98; - ACE_barrelTwist=7; - ACE_barrelLength=17.4; + ACE_barrelTwist=177.8; + ACE_barrelLength=441.96; }; class arifle_Mk20C_F: mk20_base_F { magazines[] = { @@ -474,8 +483,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.956; - ACE_barrelTwist=7; - ACE_barrelLength=16; + ACE_barrelTwist=177.8; + ACE_barrelLength=406.4; }; class arifle_Mk20_GL_F: mk20_base_F { magazines[] = { @@ -489,13 +498,13 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.956; - ACE_barrelTwist=7; - ACE_barrelLength=16; + ACE_barrelTwist=177.8; + ACE_barrelLength=406.4; }; class SMG_01_F: SMG_01_Base { initSpeed = -1.016; - ACE_barrelTwist=16; - ACE_barrelLength=5.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=139.7; }; class srifle_DMR_01_F: DMR_01_base_F { magazines[] = { @@ -503,12 +512,13 @@ class CfgWeapons { "ACE_10Rnd_762x54_Tracer_mag" }; initSpeed = -1.025; - ACE_barrelTwist=9.5; - ACE_barrelLength=24; + ACE_barrelTwist=241.3; + ACE_barrelLength=609.6; }; class srifle_EBR_F: EBR_base_F { magazines[] = { "20Rnd_762x51_Mag", + "ACE_20Rnd_762x51_Mag_Tracer", "ACE_20Rnd_762x51_Mag_Tracer_Dim", "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", "ACE_20Rnd_762x51_M118LR_Mag", @@ -517,20 +527,20 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.9724; - ACE_barrelTwist=12; - ACE_barrelLength=18; + ACE_barrelTwist=304.8; + ACE_barrelLength=457.2; }; /* class LMG_Mk200_F: Rifle_Long_Base_F { initSpeed = -1.0; - ACE_barrelTwist=7; - ACE_barrelLength=12.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; */ class srifle_LRR_F: LRR_base_F { initSpeed = -1.0; - ACE_barrelTwist=13; - ACE_barrelLength=29; + ACE_barrelTwist=330.2; + ACE_barrelLength=736.6; }; class srifle_GM6_F: GM6_base_F { magazines[] = { @@ -541,8 +551,8 @@ class CfgWeapons { "ACE_5Rnd_127x99_AMAX_Mag" }; initSpeed = -1.0; - ACE_barrelTwist=15; - ACE_barrelLength=36.6; + ACE_barrelTwist=381.0; + ACE_barrelLength=929.64; }; class srifle_DMR_02_F: DMR_02_base_F { magazines[] = { @@ -554,12 +564,13 @@ class CfgWeapons { "ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag" }; initSpeed = -0.962; - ACE_barrelTwist=10; - ACE_barrelLength=20; + ACE_barrelTwist=254.0; + ACE_barrelLength=508.0; }; class srifle_DMR_03_F: DMR_03_base_F { magazines[] = { "20Rnd_762x51_Mag", + "ACE_20Rnd_762x51_Mag_Tracer", "ACE_20Rnd_762x51_Mag_Tracer_Dim", "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", "ACE_20Rnd_762x51_M118LR_Mag", @@ -568,22 +579,23 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.9843; - ACE_barrelTwist=10; - ACE_barrelLength=20; + ACE_barrelTwist=254.0; + ACE_barrelLength=508.0; }; class srifle_DMR_04_F: DMR_04_base_F { initSpeed = -1.0; - ACE_barrelTwist=8; - ACE_barrelLength=17.72; + ACE_barrelTwist=203.2; + ACE_barrelLength=450.088; }; class srifle_DMR_05_blk_F: DMR_05_base_F { initSpeed = -1.0; - ACE_barrelTwist=14.17; - ACE_barrelLength=24.41; + ACE_barrelTwist=359.918; + ACE_barrelLength=620.014; }; class srifle_DMR_06_camo_F: DMR_06_base_F { magazines[] = { "20Rnd_762x51_Mag", + "ACE_20Rnd_762x51_Mag_Tracer", "ACE_20Rnd_762x51_Mag_Tracer_Dim", "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", "ACE_20Rnd_762x51_M118LR_Mag", @@ -592,18 +604,18 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.9916; - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class MMG_01_hex_F: MMG_01_base_F { initSpeed = -1.0; - ACE_barrelTwist=14.17; - ACE_barrelLength=21.65; + ACE_barrelTwist=359.918; + ACE_barrelLength=549.91; }; class MMG_02_camo_F: MMG_02_base_F { initSpeed = -1.0; - ACE_barrelTwist=9.25; - ACE_barrelLength=24; + ACE_barrelTwist=234.95; + ACE_barrelLength=609.6; }; class HMG_127 : LMG_RCWS { @@ -612,8 +624,8 @@ class CfgWeapons { }; class HMG_M2: HMG_01 { initSpeed = -1.0; - ACE_barrelTwist=12; - ACE_barrelLength=45; + ACE_barrelTwist=304.8; + ACE_barrelLength=1143.0; }; /* Silencers */ @@ -639,11 +651,11 @@ class CfgWeapons { }; class MuzzleCoef { - dispersionCoef = "0.8f"; + dispersionCoef = "0.95f"; artilleryDispersionCoef = "1.0f"; fireLightCoef = "0.5f"; - recoilCoef = "1.0f"; - recoilProneCoef = "1.0f"; + recoilCoef = "0.95f"; + recoilProneCoef = "0.95f"; minRangeCoef = "1.0f"; minRangeProbabCoef = "1.0f"; midRangeCoef = "1.0f"; @@ -672,11 +684,11 @@ class CfgWeapons { }; class MuzzleCoef { - dispersionCoef = "0.8f"; + dispersionCoef = "0.95f"; artilleryDispersionCoef = "1.0f"; fireLightCoef = "0.5f"; - recoilCoef = "1.0f"; - recoilProneCoef = "1.0f"; + recoilCoef = "0.95f"; + recoilProneCoef = "0.95f"; minRangeCoef = "1.0f"; minRangeProbabCoef = "1.0f"; midRangeCoef = "1.0f"; @@ -705,11 +717,11 @@ class CfgWeapons { }; class MuzzleCoef { - dispersionCoef = "0.8f"; + dispersionCoef = "0.95f"; artilleryDispersionCoef = "1.0f"; fireLightCoef = "0.5f"; - recoilCoef = "1.0f"; - recoilProneCoef = "1.0f"; + recoilCoef = "0.95f"; + recoilProneCoef = "0.95f"; minRangeCoef = "1.0f"; minRangeProbabCoef = "1.0f"; midRangeCoef = "1.0f"; @@ -738,11 +750,11 @@ class CfgWeapons { }; class MuzzleCoef { - dispersionCoef = "0.8f"; + dispersionCoef = "0.95f"; artilleryDispersionCoef = "1.0f"; fireLightCoef = "0.5f"; - recoilCoef = "1.0f"; - recoilProneCoef = "1.0f"; + recoilCoef = "0.95f"; + recoilProneCoef = "0.95f"; minRangeCoef = "1.0f"; minRangeProbabCoef = "1.0f"; midRangeCoef = "1.0f"; @@ -771,11 +783,11 @@ class CfgWeapons { }; class MuzzleCoef { - dispersionCoef = "0.8f"; + dispersionCoef = "0.95f"; artilleryDispersionCoef = "1.0f"; fireLightCoef = "0.5f"; - recoilCoef = "1.0f"; - recoilProneCoef = "1.0f"; + recoilCoef = "0.95f"; + recoilProneCoef = "0.95f"; minRangeCoef = "1.0f"; minRangeProbabCoef = "1.0f"; midRangeCoef = "1.0f"; @@ -804,11 +816,11 @@ class CfgWeapons { }; class MuzzleCoef { - dispersionCoef = "0.8f"; + dispersionCoef = "0.95f"; artilleryDispersionCoef = "1.0f"; fireLightCoef = "0.5f"; - recoilCoef = "1.0f"; - recoilProneCoef = "1.0f"; + recoilCoef = "0.95f"; + recoilProneCoef = "0.95f"; minRangeCoef = "1.0f"; minRangeProbabCoef = "1.0f"; midRangeCoef = "1.0f"; @@ -837,11 +849,11 @@ class CfgWeapons { }; class MuzzleCoef { - dispersionCoef = "0.8f"; + dispersionCoef = "0.95f"; artilleryDispersionCoef = "1.0f"; fireLightCoef = "0.5f"; - recoilCoef = "1.0f"; - recoilProneCoef = "1.0f"; + recoilCoef = "0.95f"; + recoilProneCoef = "0.95f"; minRangeCoef = "1.0f"; minRangeProbabCoef = "1.0f"; midRangeCoef = "1.0f"; @@ -870,11 +882,11 @@ class CfgWeapons { }; class MuzzleCoef { - dispersionCoef = "0.8f"; + dispersionCoef = "0.95f"; artilleryDispersionCoef = "1.0f"; fireLightCoef = "0.5f"; - recoilCoef = "1.0f"; - recoilProneCoef = "1.0f"; + recoilCoef = "0.95f"; + recoilProneCoef = "0.95f"; minRangeCoef = "1.0f"; minRangeProbabCoef = "1.0f"; midRangeCoef = "1.0f"; @@ -903,11 +915,11 @@ class CfgWeapons { }; class MuzzleCoef { - dispersionCoef = "0.8f"; + dispersionCoef = "0.95f"; artilleryDispersionCoef = "1.0f"; fireLightCoef = "0.5f"; - recoilCoef = "1.0f"; - recoilProneCoef = "1.0f"; + recoilCoef = "0.95f"; + recoilProneCoef = "0.95f"; minRangeCoef = "1.0f"; minRangeProbabCoef = "1.0f"; midRangeCoef = "1.0f"; diff --git a/addons/ballistics/README.md b/addons/ballistics/README.md index 2bf158cebc..ac727f83c6 100644 --- a/addons/ballistics/README.md +++ b/addons/ballistics/README.md @@ -1,12 +1,12 @@ ace_ballistics ============== -Changes to weapon and ammunition values. - +Changes to weapon, magazine and ammunition values. ## Maintainers The people responsible for merging changes to this component or answering potential questions. +- [Ruthberg] (http://github.com/Ulteq) - [KoffeinFlummi](https://github.com/KoffeinFlummi) - [commy2](https://github.com/commy2) diff --git a/addons/ballistics/scripts/initTargetWall.sqf b/addons/ballistics/scripts/initTargetWall.sqf index b09d5897bc..391faaa82e 100644 --- a/addons/ballistics/scripts/initTargetWall.sqf +++ b/addons/ballistics/scripts/initTargetWall.sqf @@ -1,6 +1,8 @@ // by commy2 #include "script_component.hpp" +private ["_wall", "_paper"]; + _wall = _this select 0; if (local _wall) then { diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index b91b462985..7c6d9c85ad 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -4,55 +4,55 @@ 6.5mm 30Rnd Tracer IR-DIM Mag - 6,5 mm Nyomjelző IR-DIM 30-as Tár - 6,5 mm 30-Schuss-Magazin Leuchtspur IR-DIM + 6,5mm Nyomjelző IR-DIM 30-as Tár + 6,5mm 30-Patronen-Magazin Leuchtspur IR-DIM Cargador de 30 balas trazadoras IR-DIM de 6,5mm Ch. 6,5mm 30Cps Traçantes IR-DIM Magazynek 6,5mm 30rd Smugacz IR-DIM - 6.5mm 30ks Svítící IR-DIM Zásobník + 6.5mm 30náb. Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM Магазин из 30-ти 6,5 мм ИК-трассирующих 6.5mm IR-DIM - 6,5 mm IR-DIM + 6,5mm IR-DIM 6,5mm IR-DIM 6,5mm IR-DIM 6,5mm IR-DIM 6,5mm IR-DIM 6.5mm IR-DIM 6,5mm IR-DIM - 6.5 IR-DIM + 6.5mm IR-DIM 6,5 мм ИК-трассирующие - Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL - Calibre: 6,5x39 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL - Calibre: 6,5x39 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL - Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: MX/C/M/SW/3GL - Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL - Calibro: 6.5x39 mm Traccianti IR-DIM <br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL + Caliber: 6.5x39mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL + Calibre: 6,5x39mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL + Calibre: 6,5x39mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé avec: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL + Ráže: 6.5x39mm Svítící IR-DIM<br />Munice: 30<br />Použití: MX/C/M/SW/3GL + Calibre: 6,5x39mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL + Calibro: 6.5x39mm Traccianti IR-DIM <br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL 6.5mm 30Rnd SD Mag - 6,5 mm Halk 30-as Tár - 6,5 mm 30-Schuss-Magazin SD + 6,5mm Halk 30-as Tár + 6,5mm 30-Patronen-Magazin SD Cargador de 30 balas SD de 6,5mm Ch. 6,5mm 30Cps SD Magazynek 6,5mm 30rd SD - 6.5mm 30ks SD Zásobník + 6.5mm 30náb. SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. Магазин из 30-ти 6,5 мм дозвуковых 6.5mm SD - 6,5 mm Halk + 6,5mm Halk 6,5mm SD 6,5mm SD 6,5mm SD @@ -63,32 +63,32 @@ 6,5 мм дозвуковые - Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Halk<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm SD<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL - Calibre: 6,5x39 mm SD<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL - Calibre: 6,5x39 mm SD<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm SD<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL - Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: MX/C/M/SW/3GL - Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL - Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL + Caliber: 6.5x39mm SD<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Halk<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL + Kaliber: 6,5x39mm SD<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL + Calibre: 6,5x39mm SD<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL + Calibre: 6,5x39mm SD<br />Cartouches: 30<br />Utilisé avec: MX/C/M/SW/3GL + Kaliber: 6,5x39mm SD<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL + Ráže: 6.5x39mm SD<br />Munice: 30<br />Použití: MX/C/M/SW/3GL + Calibre: 6,5x39mm SD<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL + Calibro: 6.5x39mm Sil.<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL 6.5mm 30Rnd AP Mag - 6,5 mm Páncéltörő 30-as Tár - 6,5 mm 30-Schuss-Magazin AP + 6,5mm Páncéltörő 30-as Tár + 6,5mm 30-Patronen-Magazin AP Cargador de 30 balas AP de 6,5mm Ch. 6,5mm 30Cps AP Magazynek 6,5mm 30rd AP - 6.5mm 30ks AP Zásobník + 6.5mm 30náb. AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP Магазин из 30-ти 6,5 мм бронебойных 6.5mm AP - 6,5 mm Páncéltörő + 6,5mm Páncéltörő 6,5mm AP 6,5mm AP 6,5mm AP @@ -99,26 +99,26 @@ 6,5 мм бронебойные - Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm Páncéltörő<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm AP<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL - Calibre: 6,5x39 mm AP<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL - Calibre: 6,5x39 mm AP<br />Cartouches: 30<br />Utilisé dans: MX/C/M/SW/3GL - Kaliber: 6,5x39 mm AP<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL - Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: MX/C/M/SW/3GL - Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL - Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL + Caliber: 6.5x39mm AP<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6,5x39mm Páncéltörő<br />Lövedékek: 30<br />Használható: MX/C/M/SW/3GL + Kaliber: 6,5x39mm AP<br />Patronen: 30<br />Eingesetzt von: MX/C/M/SW/3GL + Calibre: 6,5x39mm AP<br />Balas: 30<br />Se usa en: MX/C/M/SW/3GL + Calibre: 6,5x39mm AP<br />Cartouches: 30<br />Utilisé avec: MX/C/M/SW/3GL + Kaliber: 6,5x39mm AP<br />Pociski: 30<br />Używane w: MX/C/M/SW/3GL + Ráže: 6.5x39mm AP<br />Munice: 30<br />Použití: MX/C/M/SW/3GL + Calibre: 6,5x39mm AP<br />Projéteis: 30<br />Usado em: MX/C/M/SW/3GL + Calibro: 6.5x39mm AP<br />Munizioni: 30<br />In uso su: MX/C/M/SW/3GL Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL 6.5mm 30Rnd Tracer IR-DIM Mag 6,5mm IR-DIM Nyomjelző 30-as Tár - 6,5 mm 30-Schuss-Magazin Leuchtspur IR-DIM + 6,5mm 30-Patronen-Magazin Leuchtspur IR-DIM Cargador de 30 balas trazadoras IR-DIM de 6,5mm Ch. 6,5mm 30Cps Traçantes IR-DIM Magazynek 6,5mm 30rd Smugacz IR-DIM - 6.5mm 30ks Svítící IR-DIM Zásobník + 6.5mm 30náb. Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM Магазин из 30-ти 6,5 мм ИК-трассирующих @@ -136,32 +136,32 @@ 6,5 мм ИК-трассирующие - Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba - Kaliber: 6,5x39 mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: Katiba - Kaliber: 6,5x39 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: Katiba - Calibre: 6,5x39 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: Katiba - Calibre: 6,5x39 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: Katiba - Kaliber: 6,5x39 mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: Katiba - Ráže: 6.5x39 mm Svítící IR-DIM<br />Munice: 30<br />Použití: Katiba - Calibre: 6,5x39 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: Katiba - Calibro: 6.5x39 mm Tracciant IR-DIM<br />Munizioni: 30<br />In uso su: Katiba + Caliber: 6.5x39mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba + Kaliber: 6,5x39mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: Katiba + Kaliber: 6,5x39mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: Katiba + Calibre: 6,5x39mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: Katiba + Calibre: 6,5x39mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé avec: Katiba + Kaliber: 6,5x39mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: Katiba + Ráže: 6.5x39mm Svítící IR-DIM<br />Munice: 30<br />Použití: Katiba + Calibre: 6,5x39mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: Katiba + Calibro: 6.5x39mm Tracciant IR-DIM<br />Munizioni: 30<br />In uso su: Katiba Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: Katiba 6.5mm 30Rnd SD Mag - 6,5 mm Halk 30-as Tár - 6,5 mm 30-Schuss-Magazin SD + 6,5mm Halk 30-as Tár + 6,5mm 30-Patronen-Magazin SD Cargador de 30 balas SD de 6,5mm Ch. 6,5mm 30Cps SD Magazynek 6,5mm 30rd SD - 6.5mm 30ks SD Zásobník + 6.5mm 30náb. SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. Магазин из 30-ти 6,5 мм дозвуковых 6.5mm SD - 6,5 mm Halk + 6,5mm Halk 6,5mm SD 6,5mm SD 6,5mm SD @@ -172,32 +172,32 @@ 6,5 мм дозвуковые - Caliber: 6.5x39 mm SD<br />Rounds: 30<br />Used in: Katiba - Kaliber: 6,5x39 mm Halk<br />Lövedékek: 30<br />Használható: Katiba - Kaliber: 6,5x39 mm SD<br />Patronen: 30<br />Eingesetzt von: Katiba - Calibre: 6,5x39 mm SD<br />Balas: 30<br />Se usa en: Katiba - Calibre: 6,5x39 mm SD<br />Cartouches: 30<br />Utilisé dans: Katiba - Kaliber: 6,5x39 mm SD<br />Naboje: 30<br />Używane w: Katiba - Ráže: 6.5x39 mm SD<br />Munice: 30<br />Použití: Katiba - Calibre: 6,5x39 mm SD<br />Projéteis: 30<br />Usado em: Katiba - Calibro: 6.5x39 mm Sil.<br />Munizioni: 30<br />In uso su: Katiba + Caliber: 6.5x39mm SD<br />Rounds: 30<br />Used in: Katiba + Kaliber: 6,5x39mm Halk<br />Lövedékek: 30<br />Használható: Katiba + Kaliber: 6,5x39mm SD<br />Patronen: 30<br />Eingesetzt von: Katiba + Calibre: 6,5x39mm SD<br />Balas: 30<br />Se usa en: Katiba + Calibre: 6,5x39mm SD<br />Cartouches: 30<br />Utilisé avec: Katiba + Kaliber: 6,5x39mm SD<br />Naboje: 30<br />Używane w: Katiba + Ráže: 6.5x39mm SD<br />Munice: 30<br />Použití: Katiba + Calibre: 6,5x39mm SD<br />Projéteis: 30<br />Usado em: Katiba + Calibro: 6.5x39mm Sil.<br />Munizioni: 30<br />In uso su: Katiba Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: Katiba 6.5mm 30Rnd AP Mag - 6,5 mm Páncéltörő 30-as Tár - 6,5 mm 30-Schuss-Magazin AP + 6,5mm Páncéltörő 30-as Tár + 6,5mm 30-Patronen-Magazin AP Cargador de 30 balas AP de 6,5mm Ch. 6,5mm 30Cps AP Magazynek 6,5mm 30rd AP - 6.5mm 30ks AP Zásobník + 6.5mm 30náb. AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP Магазин из 30-ти 6,5 мм бронебойных 6.5mm AP - 6,5 mm Páncéltörő + 6,5mm Páncéltörő 6,5mm AP 6,5mm AP 6,5mm AP @@ -208,33 +208,33 @@ 6,5 мм бронебойные - Caliber: 6.5x39 mm AP<br />Rounds: 30<br />Used in: Katiba - Kaliber: 6,5x39 mm Páncéltörő<br />Lövedékek: 30<br />Használható: Katiba - Kaliber: 6,5x39 mm AP<br />Patronen: 30<br />Eingesetzt von: Katiba - Calibre: 6,5x39 mm AP<br />Balas: 30<br />Se usa en: Katiba - Calibre: 6,5x39 mm AP<br />Cartouches: 30<br />Utilisé dans: Katiba - Kaliber: 6,5x39 mm AP<br />Pociski: 30<br />Używane w: Katiba - Ráže: 6.5x39 mm AP<br />Munice: 30<br />Použití: Katiba - Calibre: 6,5x39 mm AP<br />Projéteis: 30<br />Usado em: Katiba - Calibro: 6.5x39 mm AP<br />Munizioni: 30<br />In uso su: Katiba + Caliber: 6.5x39mm AP<br />Rounds: 30<br />Used in: Katiba + Kaliber: 6,5x39mm Páncéltörő<br />Lövedékek: 30<br />Használható: Katiba + Kaliber: 6,5x39mm AP<br />Patronen: 30<br />Eingesetzt von: Katiba + Calibre: 6,5x39mm AP<br />Balas: 30<br />Se usa en: Katiba + Calibre: 6,5x39mm AP<br />Cartouches: 30<br />Utilisé avec: Katiba + Kaliber: 6,5x39mm AP<br />Pociski: 30<br />Używane w: Katiba + Ráže: 6.5x39mm AP<br />Munice: 30<br />Použití: Katiba + Calibre: 6,5x39mm AP<br />Projéteis: 30<br />Usado em: Katiba + Calibro: 6.5x39mm AP<br />Munizioni: 30<br />In uso su: Katiba Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: Katiba 5.56mm 30rnd Tracer IR-DIM Mag - 5,56 mm Nyomjelző IR-DIM 30-as Tár - 5,56 mm 30-Schuss-Magazin Leuchtspur IR-DIM + 5,56mm Nyomjelző IR-DIM 30-as Tár + 5,56mm 30-Patronen-Magazin Leuchtspur IR-DIM Cargador de 30 balas trazadoras IR-DIM de 5,56mm Ch. 5,56mm 30Cps Traçantes IR-DIM Magazynek 5,56mm 30rd Smugacz IR-DIM - 5.56mm 30ks Svítící IR-DIM Zásobník + 5.56mm 30náb. Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 5,56mm Caricatore 5.56mm 30rnd Traccianti IR-DIM Магазин из 30-ти 5,56 мм ИК-трассирующих 5.56mm IR-DIM - 5,56 mm IR-DIM + 5,56mm IR-DIM 5,56mm IR-DIM 5,56mm IR-DIM 5,56mm IR-DIM @@ -245,35 +245,35 @@ 5,56 мм ИК-трассирующие - Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Ráže: 5.56x45 mm Svítící IR-DIM<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Caliber: 5.56x45mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45mm Nyomjelző IR-DIM<br />Lövedékek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45mm Leuchtspur IR-DIM<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45mm Trazadoras IR-DIM<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45mm Traçantes IR-DIM<br />Cartouches: 30<br />Utilisé avec: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Kaliber: 5,56x45mm Smugacz IR-DIM<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Ráže: 5.56x45mm Svítící IR-DIM<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibre: 5,56x45mm Traçante IR-DIM<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + Calibro: 5.56x45mm 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 7.62mm 20rnd Tracer Mag - 7,62 mm Nyomjelző IR-DIM 20-as Tár - 7,62 mm 20-Schuss-Magazin Leuchtspur + 7,62mm Nyomjelző IR-DIM 20-as Tár + 7,62mm 20-Patronen-Magazin Leuchtspur Cargador de 20 balas trazadores de 7,62mm Ch. 7,62mm 20Cps Traçantes Magazynek 7,62mm 20rd Smugacz - 7.62mm 20ks Svítící Zásobník + 7.62mm 20náb. Svítící Zásobník Carregador de 20 projéteis traçantes de 7,62mm Caricatore 7.62mm 20Rnd Traccianti Магазин из 20-ти 7,62 мм трассирующих 7.62mm Tracer - 7,62 mm Nyomjelző + 7,62mm Nyomjelző 7,62mm Leuchtspur - 7,62mm trazadora + 7,62mm Trazadora 7,62mm Traçantes 7,62mm Smugacz 7.62mm Svítící @@ -282,32 +282,32 @@ 7,62 мм трассирущие - Caliber: 7.62x51 mm Tracer<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Nyomjelző<br />Lövedékek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm Leuchtspur<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm Trazadora<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm Traçantes<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62x51 mm Smugacz<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm Svítící<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm Traçante<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm Traccianti<br />Munizioni: 20<br />In uso su: Mk18 ABR + Caliber: 7.62x51mm Tracer<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51mm Nyomjelző<br />Lövedékek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51mm Leuchtspur<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51mm Trazadora<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51mm Traçantes<br />Cartouches: 20<br />Utilisé avec: EBR + Kaliber: 7,62x51mm Smugacz<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51mm Svítící<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51mm Traçante<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51mm Traccianti<br />Munizioni: 20<br />In uso su: Mk18 ABR Калибр: 7,62x51 мм трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR 7.62mm 20rnd Tracer IR-DIM Mag - 7,62 mm Nyomjelző IR-DIM 20-as Tár - 7,62 mm 20-Schuss-Magazin Leuchtspur IR-DIM + 7,62mm Nyomjelző IR-DIM 20-as Tár + 7,62mm 20-Patronen-Magazin Leuchtspur IR-DIM Cargador de 20 balas trazadoras IR-DIM de 7,62mm Ch. 7,62mm 20Cps Traçantes IR-DIM Magazynek 7,62mm 20rd Smugacz IR-DIM - 7.62mm 20ks Svítící IR-DIM Zásobník + 7.62mm 20náb. Svítící IR-DIM Zásobník Carregador de 20 projéteis IR-DIM de 7,62mm Caricatore 7.62mm 20rnd Traccianti IR-DIM Магазин из 20-ти 7,62 мм ИК-трассирующих 7.62mm IR-DIM - 7,62 mm IR-DIM + 7,62mm IR-DIM 7,62mm IR-DIM 7,62mm IR-DIM 7,62mm IR-DIM @@ -318,32 +318,32 @@ 7,62 мм ИК-трассирующие - Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Nyomjelző IR-DIM<br />Lövedékek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm Leuchtspur IR-DIM<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm Trazadoras IR-DIM<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm Traçantes IR-DIM<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62x51 mm Smugacz IR-DIM<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm Svítící IR-DIM<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm Traçante IR-DIM<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm Traccianti IR-DIM<br />Munizioni: 20<br />In uso su: Mk18 ABR + Caliber: 7.62x51mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51mm Nyomjelző IR-DIM<br />Lövedékek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51mm Leuchtspur IR-DIM<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51mm Trazadoras IR-DIM<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51mm Traçantes IR-DIM<br />Cartouches: 20<br />Utilisé avec: EBR + Kaliber: 7,62x51mm Smugacz IR-DIM<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51mm Svítící IR-DIM<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51mm Traçante IR-DIM<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51mm Traccianti IR-DIM<br />Munizioni: 20<br />In uso su: Mk18 ABR Калибр: 7,62x51 мм ИК-трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR 7.62mm 20Rnd SD Mag - 7,62 mm Halk 20-as Tár - 7,62 mm 20-Schuss-Magazin SD + 7,62mm Halk 20-as Tár + 7,62mm 20-Patronen-Magazin SD Cargador de 20 balas SD de 7,62mm Ch. 7,62mm 20Cps SD Magazynek 7,62mm 20rd SD - 7.62mm 20ks SD Zásobník + 7.62mm 20náb. SD Zásobník Carregador de 20 projéteis SD de 7,62mm Caricatore 7.62mm 20Rnd Sil. Магазин из 20-ти 7,62 мм дозвуковых 7.62mm SD - 7,62 mm Halk + 7,62mm Halk 7,62mm SD 7,62mm SD 7,62mm SD @@ -354,25 +354,29 @@ 7,62 мм дозвуковые - Caliber: 7.62x51 mm SD<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Halk<br />Lövedékek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm SD<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm SD<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm SD<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62x51 mm SD<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm SD<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm SD<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR + Caliber: 7.62x51mm SD<br />Rounds: 20<br />Used in: Mk18 ABR + Kaliber: 7,62x51mm Halk<br />Lövedékek: 20<br />Használható: Mk18 ABR + Kaliber: 7,62x51mm SD<br />Patronen: 20<br />Eingesetzt von: EBR + Calibre: 7,62x51mm SD<br />Balas: 20<br />Se usa en: Mk18 ABR + Calibre: 7,62x51mm SD<br />Cartouches: 20<br />Utilisé avec: EBR + Kaliber: 7,62x51mm SD<br />Pociski: 20<br />Używane w: Mk18 ABR + Ráže: 7.62x51mm SD<br />Munice: 20<br />Použití: Mk18 ABR + Calibre: 7,62x51mm SD<br />Projéteis: 20<br />Usado em: Mk18 ABR + Calibro: 7.62x51mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR .338 NM 130Rnd Tracer Belt - .338 NM 130-Schuss-Gurt Leuchtspur + .338 NM 130-Patronen-Gurt Leuchtspur Taśma .338 NM 130rd Smugacz Bande .338 NM 130Cps Traçante Cinta de 130 balas trazadoras de .338 NM Лента из 130-ти .338 NM трассирующих + .338 NM 130Rnd Tracciante Belt + .338 NM 130náb. Svítící Pás + Cinto de munição .338 NM com 130 cartuchos + .338 NM 130-lövedékes nyomkövető heveder .338 NM Tracer @@ -380,24 +384,35 @@ .338 NM Tracer .338 NM Svítící .338 NM Traçante - .338 NM trazadora + .338 NM Trazadora .338 NM трассирующие + .338 NM 130Rnd Tracciante + .338 NM Traçante + .338 NM nyomkövető Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG - Kaliber: .338 Norma Magnum Leuchtspur<br />Schuss: 130<br />Verwendet für: SPMG + Kaliber: .338 Norma Magnum Leuchtspur<br />Patronen: 130<br />Eingesetzt von: SPMG Kaliber: .338 Norma Magnum Smugacz<br />Pociski: 130<br />Używany w: SPMG - Calibre: .338 Norma Magnum Traçante<br />Cartouches: 130<br />Utilisé dans: SPMG + Calibre: .338 Norma Magnum Traçante<br />Cartouches: 130<br />Utilisé avec: SPMG Calibre: .338 Norma Magnum trazadora<br />Balas: 130<br />Se usa en: SPMG Калибр: .338 Norma Magnum трассирующие<br />Патронов: 130<br />Используются в: SPMG + Calibro: .338 Norma Magnum Tracciante<br />Munizioni: 130<br />In uso su: SPMG + Ráže: .338 Noma Magnum Svítící<br />Munice: 130<br />Použití: SPMG + Calibre: .338 Norma Magnum Traçante<br />Cartuchos: 130<br />Usado em: SPMG + Kaliber: .338 Norma Magnum nyomkövető<br />Lövedékek: 130<br />Használható: SPMG .338 NM 130Rnd IR-DIM Belt - .338 NM 130-Schuss-Gurt Leuchtspur IR-DIM + .338 NM 130-Patronen-Gurt Leuchtspur IR-DIM Taśma .338 NM 130rd IR-DIM Bande .338 NM 130Cps IR-DIM Cinta de 130 balas IR-DIM de .338 NM Лента из 130-ти .338 NM ИК-трассирующих + .338 NM 130Rnd IR-DIM Belt + .338 NM 130náb. IR-DIM Pás + Cinto de munição traçante .338 NM IR-DIM com 130 cartuchos + .338 NM 130-lövedékes infravörös nyomkövető heveder .338 NM IR-DIM @@ -407,22 +422,33 @@ .338 NM IR-DIM .338 NM IR-DIM .338 NM ИК-трассирующие + .338 NM IR-DIM + .338 NM IR-DIM + .338 NM infravörös nyomkövető Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG - Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Schuss: 130<br />Verwendet für: SPMG + Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Patronen: 130<br />Eingesetzt von: SPMG Kaliber: .338 Norma Magnum Smugacz IR-DIM<br />Pociski: 130<br />Używany w: SPMG - Calibre: .338 Norma Magnum Traçante IR-DIM<br />Cartouches: 130<br />Utilisé dans: SPMG + Calibre: .338 Norma Magnum Traçante IR-DIM<br />Cartouches: 130<br />Utilisé avec: SPMG Calibre: .338 Norma Magnum trazadora IR-DIM<br />Balas: 130<br />Se usa en: SPMG Калибр: .338 Norma Magnum ИК-трассирующие<br />Патронов: 130<br />Используются с: SPMG + Calibro: .338 Norma Magnum Tracciante IR-DIM<br />Munizioni: 130<br />In uso su: SPMG + Ráže: .338 Noma Magnum Svítící IR-DIM<br />Munice: 130<br />Použití: SPMG + Calibre: .338 Norma Magnum Traçante IR-DIM<br />Cartuchos: 130<br />Usado em: SPMG + Kaliber: .338 Norma Magnum infravörös nyomkövető<br />Lövedékek: 130<br />Használható: SPMG .338 NM 130Rnd AP Belt - .338 NM 130-Schuss-Gurt Hartkern + .338 NM 130-Patronen-Gurt Hartkern Taśma .338 NM 130rd AP Bande .338 NM 130Cps AP Cinta de 130 balas AP de .338 NM Лента из 130-ти .338 NM бронебойных + .338 NM 130Rnd AP Belt + .338 NM 130náb. AP Pás + Cinto de munição .338 NM com 130 cartuchos AP + .338 NM 130-lövedékes páncéltörő heveder .338 NM AP @@ -432,23 +458,34 @@ .338 NM AP .338 NM AP .338 NM бронебойные + .338 NM AP + .338 NM AP + .338 NM páncéltörő Caliber: .338 Norma Magnum AP<br />Rounds: 130<br />Used in: SPMG - Kaliber: .338 Norma Magnum Hartkern<br />Schuss: 130<br />Verwendet für: SPMG + Kaliber: .338 Norma Magnum Hartkern<br />Patronen: 130<br />Eingesetzt von: SPMG Kaliber: .338 Norma Magnum AP<br />Pociski: 130<br />Używane w: SPMG - Calibre: .338 Norma Magnum AP<br />Cartouches: 130<br />Utilisé dans: SPMG + Calibre: .338 Norma Magnum AP<br />Cartouches: 130<br />Utilisé avec: SPMG Calibre: .338 Norma Magnum AP<br />Balas: 130<br />Se usa en: SPMG Калибр: .338 Norma Magnum бронебойные<br />Патронов: 130<br />Используются с: SPMG + Calibro: .338 Norma Magnum AP<br />Munizioni: 130<br />In uso su: SPMG + Ráže: .338 Noma Magnum AP<br />Munice: 130<br />Použití: SPMG + Calibre: .338 Norma Magnum AP<br />Cartuchos: 130<br />Usado em: SPMG + Kaliber: .338 Norma Magnum páncéltörő<br />Lövedékek: 130<br />Használható: SPMG 9.3mm 10Rnd Tracer Mag - 9,3mm 10-Schuss-Magazin Leuchtspur + 9,3mm 10-Patronen-Magazin Leuchtspur Magazynek 9.3mm 10rd Smugacz - Chargeur 9.3mm 10Cps Traçante + Ch. 9.3mm 10Cps Traçante Cargador de 10 balas trazadoras de 9.3mm Магазин из 10-ти 9,3 мм трассирующих + 9.3mm 10Rnd Tracer Mag + 9.3mm 10náb. Svítící Zásobník + Carregador de 10 cartuchos 9.3mm traçantes + 9,3mm 10-lövedékes nyomkövető tár 9.3mm Tracer @@ -456,24 +493,35 @@ 9,3mm Smugacz 9.3mm Svítící 9.3mm Traçante - 9.3mm trazadora + 9.3mm Trazadora 9,3 мм трассирующие + 9.3mm Tracer + 9.3mm Traçante + 9,3mm nyomkövető Caliber: 9.3x64mm Tracer<br />Rounds: 10<br />Used in: Cyrus - Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 10<br />Verwendet für: Cyrus - Kaliber: 9,3x64 mm Smugacz<br />Pociski: 10<br />Używany w: Cyrus - Calibre: 9.3x64mm Traçante<br />Cartouches: 10<br />Utilisé dans: Cyrus + Kaliber: 9,3x64mm Leuchtspur<br />Patronen: 10<br />Eingesetzt von: Cyrus + Kaliber: 9,3x64mm Smugacz<br />Pociski: 10<br />Używany w: Cyrus + Calibre: 9.3x64mm Traçante<br />Cartouches: 10<br />Utilisé avec: Cyrus Calibre: 9.3x64mm trazadora<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм трассирующие<br />Патронов: 10<br />Используются с: Cyrus + Calibro: 9.3x64mm Tracer<br />Munizioni: 10<br />In uso su: Cyrus + Ráže: 9.3x64mm Svítící<br />Munice: 10<br />Použití: Cyrus + Calibre: 9.3x64mm Traçante<br />Cartuchos: 10<br />Usado em: Cyrus + Kaliber: 9,3x64mm nyomkövető<br />Lövedékek: 10<br />Használható: Cyrus 9.3mm 10Rnd Tracer IR-DIM Mag - 9,3mm 10-Schuss-Magazin Leuchtspur IR-DIM + 9,3mm 10-Patronen-Magazin Leuchtspur IR-DIM Magazynek 9,3mm 10rd Smugacz IR-DIM - Chargeur 9.3mm 10Cps Traçante IR-DIM + Ch. 9.3mm 10Cps Traçante IR-DIM Cargador de 10 balas trazadoras IR-DIM de 9.3mm Магазин из 10-ти 9,3 мм ИК-трассирующих + 9.3mm 10Rnd Tracciante IR-DIM Mag + 9.3mm 10náb. Svítící IR-DIM Zásobník + Carregador de 10 cartuchos 9.3mm traçantes IR-DIM + 9,3mm 10-lövedékes infravörös nyomkövető tár 9.3mm IR-DIM @@ -483,23 +531,34 @@ 9.3mm IR-DIM 9.3mm IR-DIM 9,3 мм ИК-трассирующие + 9.3mm IR-DIM + 9.3mm IR-DIM + 9,3mm infravörös nyomkövető Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 10<br />Used in: Cyrus - Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: Cyrus - Kaliber: 9,3x64 mm Smugacz IR-DIM<br />Pociski: 10<br />Używany w: Cyrus - Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 10<br />Utilisé dans: Cyrus + Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Patronen: 10<br />Eingesetzt von: Cyrus + Kaliber: 9,3x64mm Smugacz IR-DIM<br />Pociski: 10<br />Używany w: Cyrus + Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 10<br />Utilisé avec: Cyrus Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus + Calibro: 9.3x64mm Tracciante IR-DIM<br />Munizioni: 10<br />In uso su: Cyrus + Ráže: 9.3x64mm Svítící IR-DIM<br />Munice: 10<br />Použití: Cyrus + Calibre: 9.3x64mm Traçante IR-DIM<br />Cartuchos: 10<br />Usado em: Cyrus + Kaliber: 9,3x64mm infravörös nyomkövető<br />Lövedékek: 10<br /> Használható: Cyrus 9.3mm 150Rnd Tracer Belt - 9,3mm 150-Schuss-Gurt Leuchtspur + 9,3mm 150-Patronen-Gurt Leuchtspur Taśma 9,3mm 150rd Smugacz Bande 9.3mm 150Cps Traçante Cinta de 150 balas trazadoras de 9.3mm Лента из 150-ти 9,3 мм трассирующих + 9.3mm 150Rnd Tracer Belt + 9.3mm 150náb. Svítící Pás + Cinto de munição traçante 9.3mm com 150 cartuchos + 9,3mm 150-lövedékes nyomkövető heveder 9.3mm Tracer @@ -507,24 +566,35 @@ 9,3mm Smugacz 9.3mm Svítící 9.3mm Traçante - 9.3mm trazadora + 9.3mm Trazadora 9,3 мм трассирующие + 9.3mm Tracciante + 9.3mm Traçante + 9,3mm nyomkövető Caliber: 9.3x64mm Tracer<br />Rounds: 150<br />Used in: Navid - Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 150<br />Verwendet für: Navid - Kaliber: 9,3x64 mm Smugacz<br />Pociski: 150<br />Używane w: Navid - Calibre: 9.3x64mm Traçante<br />Cartouches: 150<br />Utilisé dans: Navid + Kaliber: 9,3x64mm Leuchtspur<br />Patronen: 150<br />Eingesetzt von: Navid + Kaliber: 9,3x64mm Smugacz<br />Pociski: 150<br />Używane w: Navid + Calibre: 9.3x64mm Traçante<br />Cartouches: 150<br />Utilisé avec: Navid Calibre: 9.3x64mm trazadora<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм трассирующие<br />Патронов: 150<br />Используются с: Навид + Calibro: 9.3x64mm Tracciante<br />Munizioni: 150<br />In uso su: Navid + Ráže: 9.3x64mm Svítící<br />Munice: 150<br />Použití: Navid + Calibre: 9.3x64mm Traçante<br />Cartuchos: 150<br />Usado em: Navid + Kaliber: 9,3x64mm nyomkövető<br />Lövedékek: 150<br />Használható: Navid 9.3mm 150Rnd Tracer IR-DIM Belt - 9,3mm 150-Schuss-Gurt Leuchtspur IR-DIM + 9,3mm 150-Patronen-Gurt Leuchtspur IR-DIM Taśma 9,3mm 150rd Smugacz IR-DIM Bande 9.3mm 150Cps Traçante IR-DIM Cinta de 150 balas trazadoras IR-DIM de 9.3mm Лента из 150-ти 9,3 мм ИК-трассирующих + 9.3mm 150Rnd Tracciante IR-DIM Belt + 9.3mm 150náb. Svítící IR-DIM Pás + Cinto de munição traçante 9.3mm IR-DIM com 150 cartuchos + 9,3mm 150-lövedékes infravörös nyomkövető heveder 9.3mm IR-DIM @@ -534,22 +604,33 @@ 9.3mm IR-DIM 9.3mm IR-DIM 9,3 мм ИК-трассирующие + 9.3mm IR-DIM + 9.3mm IR-DIM + 9,3mm infravörös nyomkövető Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 150<br />Used in: Navid - Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 150<br />Verwendet für: Navid - Kaliber: 9,3x64 mm Smugacz IR-DIM<br />Pociski: 150<br />Używane w: Navid - Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 150<br />Utilisé dans: Navid + Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Patronen: 150<br />Eingesetzt von: Navid + Kaliber: 9,3x64mm Smugacz IR-DIM<br />Pociski: 150<br />Używane w: Navid + Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 150<br />Utilisé avec: Navid Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 150<br />Используются с: Навид + Calibro: 9.3x64mm Tracciante IR-DIM<br />Munizioni: 150<br />In uso su: Navid + Ráže: 9.3x64mm Svítící IR-DIM<br />Munice: 150<br />Použití: Navid + Calibre: 9.3x64mm Traçante IR-DIM<br />Cartuchos: 150<br />Usado em: Navid + Kaliber: 9,3x64mm infravörös nyomkövető<br />Lövedékek: 150<br />Használható: Navid 9.3mm 150Rnd AP Belt - 9,3mm 150-Schuss-Gurt Hartkern + 9,3mm 150-Patronen-Gurt Hartkern Taśma 9,3mm 150rd AP Bande 9.3mm 150Cps AP Cinta de 150 balas AP de 9.3mm Лента из 150-ти 9,3 мм бронебойных + 9.3mm 150Rnd AP Belt + 9.3mm 150náb. AP Pás + Cinto de munição 9.3mm AP com 150 cartuchos + 9,3mm 150-lövedékes páncéltörő heveder 9.3mm AP @@ -559,21 +640,33 @@ 9.3mm AP 9.3mm AP 9,3 мм бронебойные + 9.3mm AP + 9.3mm AP + 9,3mm páncéltörő Caliber: 9.3x64mm AP<br />Rounds: 150<br />Used in: Navid - Kaliber: 9,3x64mm Hartkern<br />Schuss: 150<br />Verwendet für: Navid - Kaliber: 9,3x64 mm AP<br />Pociski: 150<br />Używane w: Navid - Calibre: 9.3x64mm AP<br />Cartouches: 150<br />Utilisé dans: Navid + Kaliber: 9,3x64mm Hartkern<br />Patronen: 150<br />Eingesetzt von: Navid + Kaliber: 9,3x64mm AP<br />Pociski: 150<br />Używane w: Navid + Calibre: 9.3x64mm AP<br />Cartouches: 150<br />Utilisé avec: Navid Calibre: 9.3x64mm AP<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм бронебойные<br />Патронов: 150<br />Используются с: Навид + Calibro: 9.3x64mm AP<br />Munizioni: 150<br />In uso su: Navid + Ráže: 9.3x64mm AP<br />Munice: 150<br />Použití: Navid + Calibre: 9.3x64mm AP<br />Cartuchos: 150<br />Usado em: Navid + Kaliber: 9,3x64mm páncéltörő<br />Lövedékek: 150<br />Használható: Navid 9x19mm 16Rnd Mag Magazynek 9x19mm 16rd - Chargeur 9x19mm 16Cps + Ch. 9x19mm 16Cps Cargador de 16 balas de 9x19mm Магазин из 16-ти 9х19 мм + 9x19mm 20-Patronen-Magazin + 9x19mm 16Rnd Mag + 9x19mm 16náb. Zásobník + Carregador de 16 cartuchos 9x19mm + 9x19mm 16-lövedékes tár 9x19mm @@ -581,20 +674,35 @@ 9x19mm 9x19mm 9х19 мм + 9x19mm + 9x19mm + 9x19mm + 9x19mm + 9x19mm 9x19mm 30Rnd Mag Magazynek 9x19mm 16rd - 9x19mm 30Cps + Ch. 9x19mm 30Cps Cargador de 16 balas de 9x19mm Магазин из 16-ти 9х19 мм + 9x19mm 30-Patronen-Magazin + 9x19mm 30Rnd Mag + 9x19mm 30náb. Zásobník + Carregador de 16 cartuchos 9x19mm + 9x19mm 16-lövedékes tár 9x19mm 30Rnd Mag Magazynek 9x19mm 30rd - 9x19mm 30Cps + Ch. 9x19mm 30Cps Cargador de 30 balas de 9x19mm Магазин из 30-ти 9х19 мм + 9x19mm 30-Patronen-Magazin + 9x19mm 30Rnd Mag + 9x19mm 30náb. Zásobník + Carregador de 30 cartuchos 9x19mm + 9x19mm 30-lövedékes tár 9x19mm @@ -602,41 +710,71 @@ 9x19mm 9x19mm 9х19 мм + 9x19mm + 9x19mm + 9x19mm + 9x19mm + 9x19mm 9x19mm 30Rnd Mag Magazynek 9x19mm 30rd - 9x19mm 30Cps + Ch. 9x19mm 30Cps Cargador de 30 balas de 9x19mm Магазин из 30-ти 9х19 мм + 9x19mm 30-Patronen-Magazin + 9x19mm 30Rnd Mag + 9x19mm 30náb. Zásobník + Carregador de 30 cartuchos 9x19mm + 9x19mm 30-lövedékes tár - 7.62x54mm 10Rnd Tracer IR-DIM Mag - Magazynek 7,62x54 mm 10rd Smugacz IR-DIM - Chargeur 7.62x54mm 10Rnd Traçante IR-DIM - Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm + 7.62x54mm 10Rnd Tracer Mag + Magazynek 7,62x54mm 10rd Smugacz + Ch. 7.62x54mm 10Rnd Traçante + Cargador de 10 balas trazadoras de 7.62x54mm Магазин из 10-ти 7,62 мм ИК-трассирующих + 7,62x54mm 10-Patronen-Magazin Leuchtspur + 7.62x54mm 10Munizioni Traccianti IR-DIM Mag + 7.62x54mm 10náb. Svítící Zásobník + Carregador com 10 cartuchos 7.62x54mm Traçante + 7,62x54mm 10-lövedékes nyomkövető tár - 7.62mm IR-DIM - 7,62mm IR-DIM - 7.62mm IR-DIM - 7.62mm IR-DIM - 7,62 мм ИК-трассирующие + 7.62mm + 7,62mm + 7.62mm + 7.62mm + 7,62 мм + 7,62mm + 7.62mm + 7.62mm + 7.62mm + 7,62mm - 7.62x54mm 10Rnd Tracer IR-DIM Mag - Magazynek 7,62x54 mm 10rd Smugacz IR-DIM - Chargeur 7.62x54mm 10Cps Traçante IR-DIM - Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm + 7.62x54mm 10Rnd Tracer Mag + Magazynek 7,62x54mm 10rd Smugacz + Ch. 7.62x54mm 10Cps Traçante + Cargador de 10 balas trazadoras de 7.62x54mm Магазин из 10-ти 7,62 мм ИК-трассирующих + 7,62x54mm 10-Patronen-Magazin Leuchtspur + 7.62x54mm 10Munizioni Traccianti IR-DIM Mag + 7.62x54mm 10náb. Svítící Zásobník + Carregador com 10 cartuchos 7.62x54mm Traçante + 7,62x54mm 10-lövedékes nyomkövető tár 6.5mm 100Rnd Tracer IR-DIM Mag Magazynek 6,5mm 100rd Smugacz IR-DIM - Chargeur 6.5mm 100Rnd Traçante IR-DIM + Ch. 6.5mm 100Rnd Traçante IR-DIM Cargador de 100 balas trazadoras IR-DIM de 6.5mm Магазин из 100 6,5 мм ИК-трассирующих + 6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur + 6.5mm 100Munizioni Traccianti IR-DIM Mag + 6.5mm 100náb. Svítící IR-DIM Zásobník + Carregador com 100 cartuchos 6.5mm IR-DIM Traçante + 6,5mm 100-lövedékes infravörös nyomkövető tár 6.5mm IR-DIM @@ -644,13 +782,23 @@ 6.5mm IR-DIM 6.5mm IR-DIM 6,5 мм ИК-трассирующие + 6,5mm IR-DIM + 6.5mm IR-DIM + 6.5mm IR-DIM + 6.5mm IR-DIM + 6,5mm infravörös nyomkövető 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 + Ch. 6.5mm 100Rnd Traçante IR-DIM<br />Cartouches: 100<br />Utilisé avec: MX LSW Cargador de 100 balas trazadoras IR-DIM de 6.5mm Магазин из 100 6,5 мм ИК-трассирующих + 6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur<br />Patronen: 100<br />Eingesetzt von: MXLSW + 6.5mm 100Rnd Tracer IR-DIM Mag<br />Munizioni: 100<br />In uso su: MX LSW + 6.5mm 100náb. Svítící IR-DIM Zásobník<br />Munice: 100<br />Použití: MX LSW + Carregador 6.5mm 100 Cartuchos Traçantes IR-DIM<br />Cartuchos: 100<br />Usado em: MX LSW + 6.5mm 100-lövedékes infravörös nyomkövető tár<br />Lövedékek: 100<br />Használható: MX LSW 6.5mm 200Rnd Tracer IR-DIM Belt @@ -658,6 +806,11 @@ Bande 6.5mm 200Rnd Traçante IR-DIM Cinta de 200 balas trazadoras IR-DIM de 6.5mm Магазин из 200-т 6,5 мм ИК-трассирующих + 6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur + 6.5mm 200Rnd Tracer IR-DIM Belt + 6.5mm 200náb. Svítící IR-DIM Pás + Cinto de munição traçante 6.5mm IR-DIM com 200 cartuchos + 6,5mm 200-lövedékes infravörös nyomkövető heveder 6.5mm IR-DIM @@ -665,13 +818,23 @@ 6.5mm IR-DIM 6.5mm IR-DIM 6,5 мм ИК-трассирующие + 6,5mm IR-DIM + 6.5mm IR-DIM + 6.5mm IR-DIM + 6.5mm IR-DIM + 6,5mm infravörös nyomkövető 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 + Bande 6.5mm 200Cps Traçante IR-DIM<br />Cartouches: 200<br />Utilisé avec: Stoner 99 LMG Cinta de 200 balas trazadoras IR-DIM de 6.5mm Магазин из 200-т 6,5 мм ИК-трассирующих + 6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur<br />Patronen: 200<br />Eingesetzt von: Stoner 99 LMG + 6.5mm 200Rnd Tracer IR-DIM Belt<br />Munizioni: 200<br />In uso su: Stoner 99 LMG + 6.5mm 200náb. Svítící IR-DIM Pás<br />Munice: 200<br />Použití: Stoner 99 LMG + Cinto de munição traçante 6.5mm IR-DIM com 200 cartuchos<br />Cartuchos: 200<br />Usado em: Stoner 99 LMG + 6.5mm 200-lövedékes infravörös nyomkövető heveder<br />Lövedékek: 200<br />Használható: Stoner 99 LMG 5.56mm 30Rnd Mag (Mk262) @@ -679,6 +842,11 @@ 5.56mm 30Cps (Mk262) Cargador de 30 balas de 5.56mm (Mk262) Магазин из 30-ти 5.56 мм Mk262 + 5,56mm 30-Patronen-Magazin (Mk262) + 5.56mm 30Rnd Mag (Mk262) + 5.56mm 30náb. Zásobník (Mk262) + Carregador 5.56mm com 30 cartuchos (Mk262) + 5,56mm 30-lövedékes tár (Mk262) 5.56mm Mk262 @@ -686,20 +854,35 @@ 5.56mm Mk262 5.56mm Mk262 5,56 мм Mk262 + 5,56mm Mk262 + 5.56mm Mk262 + 5.56mm Mk262 + 5.56mm Mk262 + 5,56mm Mk262 - Caliber: 5.56x45 mm NATO (Mk262)<br />Rounds: 30 - Kaliber: 5,56x45 mm NATO (Mk262)<br />Pociski: 30 - Calibre: 5.56x45 mm NATO (Mk262)<br />Cartouches: 30 - Calibre: 5.56x45 mm NATO (Mk262)<br />Balas: 30 + Caliber: 5.56x45mm NATO (Mk262)<br />Rounds: 30 + Kaliber: 5,56x45mm NATO (Mk262)<br />Pociski: 30 + Calibre: 5.56x45mm NATO (Mk262)<br />Cartouches: 30 + Calibre: 5.56x45mm NATO (Mk262)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk262)<br />Патронов: 30 + Kaliber: 5,56x45mm NATO (Mk262)<br />Patronen: 30 + Calibro: 5.56x45 mm NATO (Mk262)<br />Munizioni: 30 + Ráže: 5.56x45mm NATO (Mk262)<br />Munice: 30 + Calibre: 5.56x45mm NATO (Mk262)<br/>Cartuchos: 30 + Kaliber: 5,56x45mm NATO (Mk262)<br />Lövedékek: 30 5.56mm 30Rnd Mag (Mk318) Magazynek 5,56mm 30rd (Mk318) - 5.56mm 30Cps (Mk318) + Ch. 5.56mm 30Cps (Mk318) Cargador de 30 balas de 5.56mm (Mk318) Магазин из 30-ти 5.56 мм (Mk318) + 5,56mm 30-Patronen-Magazin (Mk318) + 5.56mm 30Rnd Mag (Mk318) + 5.56mm 30Rnd Zásobník (Mk318) + Carregador 5.56mm com 30 cartuchos (Mk318) + 5,56mm 30-lövedékes tár (Mk318) 5.56mm Mk318 @@ -707,83 +890,143 @@ 5.56mm Mk318 5.56mm Mk318 5.56 мм Mk318 + 5,56mm Mk318 + 5.56mm Mk318 + 5.56mm Mk318 + 5.56mm Mk318 + 5,56mm Mk318 - Caliber: 5.56x45 mm NATO (Mk318)<br />Rounds: 30 - Kaliber: 5,56x45 mm NATO (Mk318)<br />Pociski: 30 - Calibre: 5.56x45 mm NATO (Mk318)<br />Cartouches: 30 - Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30 + Caliber: 5.56x45mm NATO (Mk318)<br />Rounds: 30 + Kaliber: 5,56x45mm NATO (Mk318)<br />Pociski: 30 + Calibre: 5.56x45mm NATO (Mk318)<br />Cartouches: 30 + Calibre: 5.56x45mm NATO (Mk318)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30 + Kaliber: 5,56x45mm NATO (Mk318)<br />Patronen: 30 + Calibro: 5.56x45 mm NATO (Mk318)<br />Munizioni: 30 + Ráže: 5.56x45mm NATO (Mk318)<br />Munice: 30 + Calibre: 5.56x45mm NATO (Mk318)<br/>Cartuchos: 30 + Kaliber: 5,56x45mm NATO (Mk318)<br />Lövedékek: 30 5.56mm 30Rnd Mag (M995 AP) Magazynek 5,56mm 30rd (M995 AP) - 5.56mm 30Cps (M995 AP) + Ch. 5.56mm 30Cps (M995 AP) Cargador de 30 balas de 5.56mm (M995 AP) - Магазин из 30-ти 5.56 мм (M995 AP) + Магазин из 30-ти 5.56 мм (M995 бронебойные) + 5,56mm 30-Patronen-Magazin (M995AP) + 5.56mm 30Rnd Mag (M995 AP) + 5.56mm 30náb. Zásobník (M995 AP) + Carregador 5.56mm com 30 cartuchos (M995 AP) + 5,56mm 30-lövedékes tár (M995 páncéltörő) 5.56mm AP 5,56mm AP 5.56mm AP 5.56mm AP - 5.56 мм AP + 5.56 мм бронебойные + 5,56mm AP + 5.56mm AP + 5.56mm AP + 5.56mm M995 AP + 5,56mm páncéltörő - 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 + Caliber: 5.56x45mm NATO (M995 AP)<br />Rounds: 30 + Kaliber: 5,56x45mm NATO (M995 AP)<br />Pociski: 30 + Calibre: 5.56x45mm NATO (M995 AP)<br />Cartouches: 30 + Calibre: 5.56x45mm NATO (M995 AP)<br />Balas: 30 + Калибр: 5,56x45 мм NATO (M995 бронебойные)<br />Патронов: 30 + Kaliber: 5,56x45mm NATO (M995 AP)<br />Patronen: 30 + Calibro: 5.56x45 mm NATO (M995 AP)<br />Munizioni: 30 + Ráže: 5.56x45mm NATO (M995 AP)<br />Munice: 30 + Calibre: 5.56x45mm NATO (M995 AP)<br/>Cartuchos: 30 + Kaliber: 5,56x45mm NATO (M995 páncéltörő)<br />Lövedékek: 30 7.62mm 10Rnd Mag (M118LR) Magazynek 7,62mm 10rd (M118LR) - 7.62mm 10Cps (M118LR) + Ch. 7.62mm 10Cps (M118LR) Cargador de 10 balas de 7.62mm (M118LR) Магазин из 10-ти 7,62 мм (M118LR) + 7,62mm 10-Patronen-Magazin (M118LR) + 7.62mm 10Rnd Mag (M118LR) + 7.62mm 10náb. Zásobník (M118LR) + Carregador 7.62mm com 10 cartuchos (M118LR) + 7,62mm 10-lövedékes tár (M118LR) 7.62mm M118LR 7,62mm M118LR 7.62mm M118LR - 7.62mm (M118LR) + 7.62mm M118LR 7,62 мм M118LR + 7,62mm M118LR + 7.62mm M118LR + 7.62mm M118LR + 7.62mm M118LR + 7,62mm M118LR - Caliber: 7.62x51 mm NATO (M118LR)<br />Rounds: 10 - Kaliber: 7,62x51 mm NATO (M118LR)<br />Pociski: 10 - Calibre: 7.62x51 mm NATO (M118LR)<br />Cartouches: 10 - Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 10 + Caliber: 7.62x51mm NATO (M118LR)<br />Rounds: 10 + Kaliber: 7,62x51mm NATO (M118LR)<br />Pociski: 10 + Calibre: 7.62x51mm NATO (M118LR)<br />Cartouches: 10 + Calibre: 7.62x51mm NATO (M118LR)<br />Balas: 10 Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 10 + Kaliber: 7,62x51mm NATO (M118LR)<br />Patronen: 10 + Calibro: 7.62x51 mm NATO (M118LR)<br />Munizioni: 10 + Ráže: 7.62x51mm NATO (M118LR)<br />Munice: 10 + Calibre: 7.26x51mm NATO (M118LR)<br/>Cartuchos: 10 + Kaliber: 7,62x51mm NATO (M118LR)<br />Lövedékek: 10 7.62mm 20Rnd Mag (M118LR) Magazynek 7,62mm 20rd (M118LR) - 7.62mm 20Cps (M118LR) + Ch. 7.62mm 20Cps (M118LR) Cargador de 20 balas de 7.62mm (M118LR) Магазин из 20-ти 7,62 мм (M118LR) + 7,62mm 20-Patronen-Magazin (M118LR) + 7.62mm 20Rnd Mag (M118LR) + 7.62mm 20náb. Zásobník (M118LR) + Carregador 7.62mm com 20 cartuchos (M118LR) + 7,62mm 20-lövedékes tár (M118LR) 7.62mm M118LR 7,62mm M118LR 7.62mm M118LR - 7.62mm (M118LR) + 7.62mm M118LR 7,62 мм M118LR + 7,62mm M118LR + 7.62mm M118LR + 7.62mm M118LR + 7.62mm M118LR + 7,62mm M118LR - Caliber: 7.62x51 mm NATO (M118LR)<br />Rounds: 20 - Kaliber: 7,62x51 mm NATO (M118LR)<br />Pociski: 20 - Calibre: 7.62x51 mm NATO (M118LR)<br />Cartouches: 20 - Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 20 + Caliber: 7.62x51mm NATO (M118LR)<br />Rounds: 20 + Kaliber: 7,62x51mm NATO (M118LR)<br />Pociski: 20 + Calibre: 7.62x51mm NATO (M118LR)<br />Cartouches: 20 + Calibre: 7.62x51mm NATO (M118LR)<br />Balas: 20 Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (M118LR)<br />Patronen: 20 + Calibro: 7.62x51 mm NATO (M118LR)<br />Munizioni: 20 + Ráže: 7.62x51mm NATO (M118LR)<br />Munice: 20 + Calibre: 7.26x51mm NATO (M118LR)<br/>Cartuchos: 20 + Kaliber: 7,62x51mm NATO (M118LR)<br />Lövedékek: 20 7.62mm 10Rnd Mag (Mk316 Mod 0) Magazynek 7,62mm 10rd (Mk316 Mod 0) - 7.62mm 10Cps (Mk316 Mod 0) + Ch. 7.62mm 10Cps (Mk316 Mod 0) Cargador de 10 balas de 7.62mm (Mk316 Mod 0) Магазин из 10-ти 7,62 мм (Mk316 Mod 0) + 7,62mm 10-Patronen-Magazin (Mk316 Mod 0) + 7.62mm 10Rnd Mag (Mk316 Mod 0) + 7.62mm 10náb. Zásobník (Mk316 Mod 0) + Carregador 7.62mm com 10 cartuchos (Mk316 Mod 0) + 7,62mm 10-lövedékes tár (Mk316 Mod 0) 7.62mm Mk316 @@ -791,20 +1034,35 @@ 7.62mm Mk316 7.62mm Mk316 7,62 мм Mk316 + 7,62mm Mk316 + 7.62mm Mk316 + 7.62mm Mk316 + 7.62mm Mk316 + 7,62mm 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 + Caliber: 7.62x51mm NATO (Mk316 Mod 0)<br />Rounds: 10 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Pociski: 10 + Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 10 + Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Balas: 10 Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 10 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 10 + Calibro: 7.62x51 mm NATO (Mk316 Mod 0)<br />Munizioni: 10 + Ráže: 7.62x51mm NATO (Mk316 Mod 0)<br />Munice: 10 + Calibre: 7.26x51mm NATO (Mk316 Mod 0)<br/>Cartuchos: 10 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Lövedékek: 10 7.62mm 20Rnd Mag (Mk316 Mod 0) Magazynek 7,62mm 20rd (Mk316 Mod 0) - 7.62mm 20Cps (Mk316 Mod 0) + Ch. 7.62mm 20Cps (Mk316 Mod 0) Cargador de 20 balas de 7.62mm (Mk316 Mod 0) Магазин из 20-ти 7,62 мм (Mk316 Mod 0) + 7,62mm 20-Patronen-Magazin (Mk316 Mod 0) + 7.62mm 20Rnd Mag (Mk316 Mod 0) + 7.62mm 20náb. Zásobník (Mk316 Mod 0) + Carregador 7.62mm com 20 cartuchos (Mk316 Mod 0) + 7,62mm 20-lövedékes tár (Mk316 Mod 0) 7.62mm Mk316 @@ -812,41 +1070,71 @@ 7.62mm Mk316 7.62mm Mk316 7,62 мм Mk316 + 7,62mm Mk316 + 7.62mm Mk316 + 7.62mm Mk316 + 7.62mm Mk316 + 7,62mm 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 + Caliber: 7.62x51mm NATO (Mk316 Mod 0)<br />Rounds: 20 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Pociski: 20 + Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 20 + Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 20 + Calibro: 7.62x51 mm NATO (Mk316 Mod 0)<br />Munizioni: 20 + Ráže: 7.62x51mm NATO (Mk316 Mod 0)<br />Munice: 20 + Calibre: 7.26x51mm NATO (Mk316 Mod 0)<br/>Cartuchos: 20 + Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Lövedékek: 20 7.62mm 10Rnd Mag (Mk319 Mod 0) Magazynek 7,62mm 10rd (Mk319 Mod 0) - 7.62mm 10Cps (Mk319 Mod 0) + Ch. 7.62mm 10Cps (Mk319 Mod 0) Cargador de 10 balas de 7.62mm (Mk319 Mod 0) Магазин из 10-ти 7,62 мм (Mk319 Mod 0) + 7,62mm 10-Patronen-Magazin (Mk319 Mod 0) + 7.62mm 10Rnd Mag (Mk319 Mod 0) + 7.62mm 10náb. Zásobník (Mk319 Mod 0) + Carregador 7.62mm com 10 cartuchos (Mk319 Mod 0) + 7,62mm 10-lövedékes tár (Mk319 Mod 0) 7.62mm Mk319 7,62mm Mk319 7.62mm Mk319 7.62mm Mk319 - 7,62mm Mk319 + 7,62 мм Mk319 + 7,62mm Mk319 + 7.62mm Mk319 + 7.62mm Mk319 + 7.62mm Mk319 + 7,62mm Mk319 - Caliber: 7.62x51 mm NATO (Mk319 Mod 0)<br />Rounds: 10 - Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)<br />Pociski: 10 - Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Cartouches: 10 - Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 10 + Caliber: 7.62x51mm NATO (Mk319 Mod 0)<br />Rounds: 10 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Pociski: 10 + Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 10 + Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Balas: 10 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 10 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 10 + Calibro: 7.62x51 mm NATO (Mk319 Mod 0)<br />Munizioni: 10 + Ráže: 7.62x51mm NATO (Mk319 Mod 0)<br />Munice: 10 + Calibre: 7.26x51mm NATO (Mk319 Mod 0)<br/>Cartuchos: 10 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Lövedékek: 10 7.62mm 20Rnd Mag (Mk319 Mod 0) Magazynek 7,62mm 20rd (Mk319 Mod 0) - 7.62mm 20Cps (Mk319 Mod 0) + Ch. 7.62mm 20Cps (Mk319 Mod 0) Cargador de 20 balas de 7.62mm (Mk319 Mod 0) Магазин из 20-ти 7,62 мм (Mk319 Mod 0) + 7,62mm 20-Patronen-Magazin (Mk319 Mod 0) + 7.62mm 20Rnd Mag (Mk319 Mod 0) + 7.62mm 20náb. Zásobník (Mk319 Mod 0) + Carregador 7.62mm com 20 cartuchos (Mk319 Mod 0) + 7,62mm 20-lövedékes tár (Mk319 Mod 0) 7.62mm Mk319 @@ -854,125 +1142,215 @@ 7.62mm Mk319 7.62mm Mk319 7,62 мм Mk319 + 7,62mm Mk319 + 7.62mm Mk319 + 7.62mm Mk319 + 7.62mm Mk319 + 7,62mm Mk319 - Caliber: 7.62x51 mm NATO (Mk319 Mod 0)<br />Rounds: 20 - Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)<br />Pociski: 20 - Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Cartouches: 20 - Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 20 + Caliber: 7.62x51mm NATO (Mk319 Mod 0)<br />Rounds: 20 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Pociski: 20 + Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 20 + Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 20 + Calibro: 7.62x51 mm NATO (Mk319 Mod 0)<br />Munizioni: 20 + Ráže: 7.62x51mm NATO (Mk319 Mod 0)<br />Munice: 20 + Calibre: 7.26x51mm NATO (Mk319 Mod 0)<br/>Cartuchos: 20 + Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Lövedékek: 20 7.62mm 10Rnd Mag (M993 AP) Magazynek 7,62mm 10rd (M993 AP) - 7.62mm 10Cps (M993 AP) + Ch. 7.62mm 10Cps (M993 AP) Cargador de 10 balas de 7.62mm (M993 AP) - Магазин из 10-ти 7,62 мм (M993 AP) + Магазин из 10-ти 7,62 мм (M993 бронебойные) + 7,62mm 10-Patronen-Magazin (M993 AP) + 7.62mm 10Rnd Mag (M993 AP) + 7.62 10náb. Zásobník (M993 AP) + Carregador 7.62mm com 10 cartuchos (M993 AP) + 7,62mm 10-lövedékes tár (M993 páncéltörő) 7.62mm AP 7,62mm AP 7.62mm AP 7.62mm AP - 7,62mm AP + 7,62mm бронебойные + 7,62mm AP + 7.62mm AP + 7.62mm AP + 7.62mm AP + 7,62mm páncéltörő - 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 + Caliber: 7.62x51mm NATO (M993 AP)<br />Rounds: 10 + Kaliber: 7,62x51mm NATO (M993 AP)<br />Pociski: 10 + Calibre: 7.62x51mm NATO (M993 AP)<br />Cartouches: 10 + Calibre: 7.62x51mm NATO (M993 AP)<br />Balas: 10 + Калибр: 7,62x51 мм NATO (M993 бронебойные)<br />Патронов: 10 + Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 10 + Calibro: 7.62x51 mm NATO (M993 AP)<br />Munizioni: 10 + Ráže: 7.62x51mm NATO (M993 AP)<br />Munice: 10 + Calibre: 7.26x51mm NATO (M993 AP)<br/>Cartuchos: 10 + Kaliber: 7,62x51mm NATO (M993 páncéltörő)<br />Lövedékek: 10 7.62mm 20Rnd Mag (M993 AP) Magazynek 7,62mm 20rd (M993 AP) - 7.62mm 20Cps (M993 AP) + Ch. 7.62mm 20Cps (M993 AP) Cargador de 20 balas de 7.62mm (M993 AP) - Магазин из 20-ти 7,62 мм (M993 AP) + Магазин из 20-ти 7,62 мм (M993 бронебойные) + 7,62mm 20-Patronen-Magazin (M993 AP) + 7.62mm 20Rnd Mag (M993 AP) + 7.62mm 20náb. Zásobník (M993 AP) + Carregador 7.62mm com 20 cartuchos (M993 AP) + 7,62mm 20-lövedékes tár (M993 páncéltörő) 7.62mm AP 7,62mm AP 7.62mm AP 7.62mm AP - 7,62 мм AP + 7,62 мм бронебойные + 7,62mm AP + 7.62mm AP + 7.62mm AP + 7.62mm AP + 7,62mm páncéltörő - 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 + Caliber: 7.62x51mm NATO (M993 AP)<br />Rounds: 20 + Kaliber: 7,62x51mm NATO (M993 AP)<br />Pociski: 20 + Calibre: 7.62x51mm NATO (M993 AP)<br />Cartouches: 20 + Калибр: 7,62x51 мм NATO (M993 бронебойные)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 20 + Calibro: 7.62x51 mm NATO (M993 AP)<br />Munizioni: 20 Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 20 - Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 20 + Ráže: 7.62x51mm NATO (M993 AP)<br />Munice: 20 + Calibre: 7.26x51mm NATO (M993 AP)<br/>Cartuchos: 20 + Kaliber: 7,62x51mm NATO (M993 páncéltörő)<br />Lövedékek: 20 7.62mm 20Rnd Mag (Mk248 Mod 0) Magazynek 7,62mm 20rd (Mk248 Mod 0) - 7.62mm 20Cps (Mk248 Mod 0) + Ch. 7.62mm 20Cps (Mk248 Mod 0) Cargador de 20 balas de 7.62mm (Mk248 Mod 0) Магазин из 20-ти 7,62 мм (Mk248 Mod 0) + 7,62mm 20-Patronen-Magazin (Mk248 Mod 0) + 7.62mm 20Rnd Mag (Mk248 Mod 0) + 7.62mm 20náb. Zásobník (Mk248 Mod 0) + Carregador 7.62mm com 20 cartuchos (Mk248 Mod 0) + 7,62mm 20-lövedékes tár (Mk248 Mod 0) - 7.62mm (Mk248 Mod 0) - 7,62mm (Mk248 Mod 0) - 7.62mm (Mk248 Mod 0) - 7.62mm (Mk248 Mod 0) - 7,62 мм (Mk248 Mod 0) + 7.62mm Mk248 + 7,62mm Mk248 + 7.62mm Mk248 + 7.62mm Mk248 + 7,62 мм Mk248 + 7,62mm Mk248 + 7.62mm Mk248 + 7.62mm Mk248 + 7.62mm Mk248 + 7,62mm Mk248 - Caliber: 7.62x67 mm NATO (Mk248 Mod 0)<br />Rounds: 20 - Kaliber: 7,62x67 mm NATO (Mk248 Mod 0)<br />Pociski: 20 + Caliber: 7.62x67mm NATO (Mk248 Mod 0)<br />Rounds: 20 + Kaliber: 7,62x67mm NATO (Mk248 Mod 0)<br />Pociski: 20 Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Cartouches: 20 - Calibre: 7.62x67 mm NATO (Mk248 Mod 0)<br />Balas: 20 + Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Mk248 Mod 0)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (Mk248 Mod 0)<br />Patronen: 20 + Calibro: 7.62x67 mm NATO (Mk248 Mod 0)<br />Munizioni: 20 + Ráže: 7.62x67mm NATO (Mk248 Mod 0)<br />Munice: 20 + Calibre: 7.26x67mm NATO (Mk248 Mod 0)<br/>Cartuchos: 20 + Kaliber: 7,62x51mm NATO (Mk248 Mod 0)<br />Lövedékek: 20 7.62mm 20Rnd Mag (Mk248 Mod 1) Magazynek 7,62mm 20rd (Mk248 Mod 1) - 7.62mm 20Cps (Mk248 Mod 1) + Ch. 7.62mm 20Cps (Mk248 Mod 1) Cargador de 20 balas de 7.62mm (Mk248 Mod 1) Магазин из 20-ти 7,62 мм (Mk248 Mod 1) + 7,62mm 20-Patronen-Magazin (Mk248 Mod 1) + 7.62mm 20Rnd Mag (Mk248 Mod 1) + 7.62mm 20náb. Zásobník (Mk248 Mod 1) + Carregador 7.62mm com 20 cartuchos (Mk248 Mod 1) + 7,62mm 20-lövedékes tár (Mk248 Mod 1) - 7.62mm (Mk248 Mod 1) - 7,62mm (Mk248 Mod 1) - 7.62mm (Mk248 Mod 1) - 7.62mm (Mk248 Mod 1) - 7,62 мм (Mk248 Mod 1) + 7.62mm Mk248 + 7,62mm Mk248 + 7.62mm Mk248 + 7.62mm Mk248 + 7,62 мм Mk248 + 7,62mm Mk248 + 7.62mm Mk248 + 7.62mm Mk248 + 7.62mm Mk248 + 7,62mm Mk248 - Caliber: 7.62x67 mm NATO (Mk248 Mod 1)<br />Rounds: 20 - Kaliber: 7,62x67 mm NATO (Mk248 Mod 1)<br />Pociski: 20 + Caliber: 7.62x67mm NATO (Mk248 Mod 1)<br />Rounds: 20 + Kaliber: 7,62x67mm NATO (Mk248 Mod 1)<br />Pociski: 20 Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Cartouches: 20 - Calibre: 7.62x67 mm NATO (Mk248 Mod 1)<br />Balas: 20 + Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Mk248 Mod 1)<br />Патронов: 20 + Kaliber: 7,62x51mm NATO (Mk248 Mod 1)<br />Patronen: 20 + Calibro: 7.62x67 mm NATO (Mk248 Mod 1)<br />Munizioni: 20 + Ráže: 7.62x67mm NATO (Mk248 Mod 1)<br />Munice: 20 + Calibre: 7.26x67mm NATO (Mk248 Mod 1)<br/>Cartuchos: 20 + Kaliber: 7,62x51mm NATO (Mk248 Mod 1)<br />Lövedékek: 20 7.62mm 20Rnd Mag (Berger Hybrid OTM) Magazynek 7,62mm 20rd (Berger Hybrid OTM) - 7.62 20Cps (Berger Hybrid OTM) + Ch. 7.62 20Cps (Berger Hybrid OTM) Cargador de 20 balas de 7.62mm (Berger Hybrid OTM) Магазин из 20-ти 7,62 мм (Berger Hybrid OTM) + 7,62mm 20-Patronen-Magazin (Berger Hybrid OTM) + 7.62mm 20Rnd Mag (Berger Hybrid OTM) + 7.62mm 20náb. Zásobník (Berger Hybrid OTM) + Carregador 7.62mm com 20 cartuchos (Berger Hybrid OTM) + 7,62mm 20-lövedékes tár (Berger Hybrid OTM) - 7.62mm (OTM) - 7,62mm (OTM) - 7.62mm (OTM) - 7.62mm (OTM) - 7,62 мм (OTM) + 7.62mm OTM + 7,62mm OTM + 7.62mm OTM + 7.62mm OTM + 7,62 мм OTM + 7,62mm OTM + 7.62mm OTM + 7.62mm OTM + 7.62mm OTM + 7,62mm OTM - Caliber: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Rounds: 20 - Kaliber: 7,62x67 mm NATO (Berger Hybrid OTM)<br />Pociski: 20 + Caliber: 7.62x67mm NATO (Berger Hybrid OTM)<br />Rounds: 20 + Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Pociski: 20 Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Cartouches: 20 - Calibre: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Balas: 20 + Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Berger Hybrid OTM)<br />Патронов: 20 + Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Patronen: 20 + Calibro: 7.62x67 mm NATO (Berger Hybrid OTM)<br />Munizioni: 20 + Ráže: 7.62x67mm NATO (Berger Hybrid OTM)<br />Munice: 20 + Calibre: 7.26x67mm NATO (Berger Hybrid OTM)<br/>Cartuchos: 20 + Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Lövedékek: 20 6.5x47mm 30Rnd Mag (HPBT Scenar) - 6.5x47mm 30Cps (HPBT Scenar) + Ch. 6.5x47mm 30Cps (HPBT Scenar) Cargador de 30 balas de 6.5x47mm (HPBT Scenar) - Magazynek 6,5x47 mm 30rd (HPBT Scenar) - Магазин из 30-ти 6,5x47 мм (HPBT Scenar) + Magazynek 6,5x47mm 30rd (HPBT Scenar) + Магазин из 30-ти 6,5x47 мм (экспансивные Scenar) + 6,5x47mm 30-Patronen-Magazin (HPBT Scenar) + 6.5x47mm 30Rnd Mag (HPBT Scenar) + 6.5x47mm 30náb. Zásobník (HPBT Scenar) + Carregador 6.5x47mm com 30 cartuchos (HPBT Scenar) + 6,5x47mm 30-lövedékes tár (HPBT Scenar) 6.5mm Lapua @@ -980,18 +1358,35 @@ 6.5mm Lapua 6,5mm Lapua 6,5 мм Lapua + 6,5mm Lapua + 6.5mm Lapua + 6.5mm Lapua + 6.5mm Lapua + 6,5mm Lapua 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 - Калибр: 6,5x47 мм (HPBT Scenar)<br />Патронов: 30 + Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30<br />Se usa en: MXM + Kaliber: 6,5x47mm (HPBT Scenar)<br />Pociski: 30 + Калибр: 6,5x47 мм (экспансивные Scenar)<br />Патронов: 30<br />Используются с: MXM + Kaliber: 6,5x47mm (HPBT Scenar)<br />Patronen: 30<br />Eingesetzt von: MXM + Calibro: 6.5x47mm (HPBT Scenar)<br />Munizioni: 30<br />In uso su: MXM + Ráže: 6.5x47mm (HPBT Scenar)<br />Munice: 30<br />Použití: MXM + Calibre: 6.5x47mm (HPBT Scenar)<br/>Cartuchos: 30<br/>Usado em: MXM + Kaliber: 6,5x47mm (HPBT Scenar)<br />Lövedékek: 30<br />Használható: MXM 6.5mm Creedmor 30Rnd Mag Magazynek 6,5mm Creedmor 30rd + 6.5mm Creedmor 30Rnd Mag + Магазин из 30-ти 6,5 мм Creedmor + 6,5mm Creedmor 30-Patronen-Magazin Cargador de 30 balas Creedmor de 6.5mm + Ch. 6.5mm Creedmor 30Cps + 6.5mm Creedmor 30náb. Zásobník + Carregador 6.5mm com 30 cartuchos Creedmor + 6,5mm Creedmor 30-lövedékes tár 6.5mm CM @@ -999,60 +1394,107 @@ 6.5mm CM 6,5mm CM 6,5 мм CM + 6,5mm CM + 6.5mm CM + 6.5mm CM + 6.5mm CM + 6,5mm CM - Caliber: 6.5mm Creedmor<br />Rounds: 30<br />Used in: MXM - Kaliber: 6,5mm Creedmor<br />Pociski: 30<br />Używany w: MXM + Caliber: 6.5x47mm Creedmor<br />Rounds: 30<br />Used in: MXM + Kaliber: 6,5x47mm Creedmor<br />Pociski: 30<br />Używany w: MXM + Kaliber: 6,5x47mm Creedmor<br />Patronen: 30<br />Eingesetzt von: MXM + Calibre: 6.5x47mm Creedmor <br />Cartouches: 30<br />Utilisé avec: MXM + Calibro: 6.5mm Creedmor<br />Munizioni: 30<br />In uso su: MXM Calibre: 6.5mm Creedmor<br />Balas: 30<br />Se usa en: MXM + Калибр: 6,5x47мм Creedmor<br />Патронов: 30<br />Используются c: MXM + Ráže: 6.5x47mm Creedmor<br />Munice: 30<br />Použití: MXM + Calibre: 6.5x47mm Creedmor<br/>Cartuchos: 30<br/>Usado em: MXM + Kaliber: 6,5x47mm Creedmor<br />Lövedékek: 30<br />Használható: MXM .338 10Rnd Mag (300gr Sierra MatchKing HPBT) - .338 10 Cps (300gr Sierra MatchKing HPBT) + Ch. .338 10 Cps (300gr Sierra MatchKing HPBT) Cargador de 10 balas de 8.6x70mm (300gr Sierra MatchKing HPBT) Magazynek .338 10rd (300gr Sierra MatchKing HPBT) - Магазин из 10-ти .338 (300 гран Sierra MatchKing HPBT) + Магазин из 10-ти .338 (300 гран Sierra MatchKing экспансивные) + .338 10-Patronen-Magazin (300gr Sierra MatchKing HPBT) + .338 10Munizioni Mag (300gr Sierra MatchKing HPBT) + .338 10náb. Zásobník (300gr Sierra MatchKing HPBT) + Carregador .338 (300gr Sierra MatchKing HPBT) com 10 cartuchos + .338 10-lövedékes tár (300gr Sierra MatchKing HPBT) - .338 (HPBT) - .338 (HPBT) - .338 (HPBT) - .338 (HPBT) - .338 (HPBT) + .338 HPBT + .338 HPBT + .338 HPBT + .338 HPBT + .338 экспансивные + .338 HPBT + .338 HPBT + .338 HPBT + .338 HPBT + .338 HPBT Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Rounds: 10 Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10 Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Balas: 10 - Kaliber: 8,6x70 mm (300gr Sierra MatchKing HPBT)<br />Pociski: 10 - Калибр: .338 (300 гран Sierra MatchKing HPBT)<br />Патронов: 10 + Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Pociski: 10 + Калибр: 8,6x70mm (300 гран Sierra MatchKing экспансивные)<br />Патронов: 10 + Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Patronen: 10 + Calibro: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Munizioni: 10 + Ráže: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Munice: 10 + Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br/>Cartuchos: 10 + Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Lövedékek: 10 .338 10Rnd Mag (API526) - .338 10Cps (API526) + Ch. .338 10Cps (API526) Cargador de 10 balas de .338 (API526) Magazynek .338 10rd (API526) Магазин из 10-ти .338 (API526) + .338 10-Patronen-Magazin (API526) + .338 10Rnd Mag (API526) + .338 10náb. Zásobník (API526) + Carregador .338 (API526) com 10 cartuchos + .338 10-lövedékes tár (API526) .338 AP .338 AP .338 AP .338 AP - .338 бронебойные + .338 AP + .338 AP + .338 AP + .338 AP + .338 AP + .338 páncéltörő Caliber: 8.6x70mm (API526)<br />Rounds: 10 Calibre: 8.6x70mm (API526)<br />Cartouches: 10 Calibre: 8.6x70mm (API526)<br />Balas: 10 - Kaliber: 8,6x70 mm (API526)<br />Pociski: 10 - Калибр: .338 (API526)<br />Патронов: 10 + Kaliber: 8,6x70mm (API526)<br />Pociski: 10 + Калибр: 8,6x70 мм (API526)<br />Патронов: 10 + Kaliber: 8,6x70mm (API526)<br />Patronen: 10 + Calibro: 8.6x70mm (API526)<br />Munizioni: 10 + Ráže: 8.6x70mm (API526)<br />Munice: 10 + Calibre: 8.6x70mm (API526)<br/>Cartuchos: 10 + Kaliber: 8,6x70mm (API526)<br />Lövedékek: 10 12.7x99mm 5Rnd Mag - 12.7x99mm 5Cps + Ch. 12.7x99mm 5Cps Cargador de 5 balas de 12.7x99mm - Magazynek 12,7x99 mm 5rd + Magazynek 12,7x99mm 5rd Магазин из 5-ти 12,7x99 мм + 12,7x99mm 5-Patronen-Magazin + 12.7x99mm 5Rnd Mag + 12.7x99mm 5náb. Zásobník + Carregador 12.7x99mm com 5 cartuchos + 12,7x99mm 5-lövedékes tár 12.7mm @@ -1060,38 +1502,71 @@ 12.7mm 12,7mm 12,7 мм + 12,7mm + 12.7mm + 12.7mm + 12.7mm + 12,7mm Caliber: 12.7x99mm<br />Rounds: 5 Calibre: 12.7x99mm<br />Cartouches: 5 Calibre: 12.7x99mm<br />Balas: 5 - Kaliber: 12,7x99 mm<br />Pociski: 5 + Kaliber: 12,7x99mm<br />Pociski: 5 Калибр: 12,7x99 мм<br />Патронов: 5 + Kaliber: 12,7x99mm<br />Patronen: 5 + Calibro: 12.7x99mm<br />Munizioni: 5 + Ráže: 12.7x99mm<br />Munice: 5 + Calibre: 12.7x99mm<br/>Cartuchos: 5 + Kaliber: 12,7x99mm<br />Lövedékek: 5 12.7x99mm API 5Rnd Mag - 12.7x99mm API 5Cps + Ch. 12.7x99mm API 5Cps Cargador de 5 balas de 12.7x99mm API Magazynek 12,7x99mm API 5rd + 12.7x99mm API 5Rnd Mag + Магазин из 5-ти 12,7x99 мм (бронебойно-зажигательные) + 12,7x99mm 5-Patronen-Magazin (API) + 12.7x99mm API 5náb. Zásobník + Carregador 12.7x99mm API com 5 cartuchos + 12,7x99mm 5-lövedékes tár (páncéltörő-gyújtó) 12.7mm API 12.7mm API 12.7mm API 12,7mm API + 12.7mm API + 12.7 мм бронебойно-зажигательные + 12,7mm API + 12.7mm API + 12.7mm API + 12,7mm páncéltörő-gyújtó 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 + Kaliber: 12,7x99mm API<br />Pociski: 5 + Калибр: 12,7x99 мм бронебойно-зажигательные<br />Патронов: 5 + Kaliber:12,7x99mm API<br />Patronen: 5 + Calibro: 12.7x99mm API<br />Munizioni: 5 + Ráže: 12.7x99mm API<br />Munice: 5 + Calibre: 12.7x99mm API<br/>Cartuchos: 5 + Kaliber: 12,7x99mm API<br />Lövedékek: 5 12.7x99mm 5Rnd Mag (AMAX) - 12.7x99mm 5Rnd Mag (AMAX) + Ch. 12.7x99mm 5Cps (AMAX) Cargador de 5 balas de 12.7x99mm (AMAX) - Magazynek 12,7x99 mm 5rd (AMAX) + Magazynek 12,7x99mm 5rd (AMAX) Магазин из 5-ти 12,7x99 мм (A-MAX) + 12,7x99mm 5-Patronen-Magazin (AMAX) + 12.7x99mm 5Rnd Mag (AMAX) + 12.7x99mm 5náb. Zásobník (AMAX) + Carregador 12.7x99mm (AMAX) com 5 cartuchos + 12,7x99mm 5-lövedékes tár (AMAX) 12.7mm @@ -1099,13 +1574,23 @@ 12.7mm 12,7mm 12,7 мм + 12,7mm + 12.7mm + 12.7mm + 12.7mm + 12,7mm Caliber: 12.7x99mm (AMAX)<br />Rounds: 5 Calibre: 12.7x99mm (AMAX)<br />Cartouches: 5 Calibre: 12.7x99mm (AMAX)<br />Balas: 5 - Kaliber: 12,7x99 mm (AMAX)<br />Pociski: 5 + Kaliber: 12,7x99mm (AMAX)<br />Pociski: 5 Калибр: 12,7x99 мм (A-MAX)<br />Патронов: 5 + Calibro: 12.7x99mm (AMAX)<br />Munizioni: 5 + Kaliber:12,7x99mm (AMAX)<br />Patronen: 5 + Ráže: 12.7x99mm (AMAX)<br />Munice: 5 + Calibre: 12.7x99mm (AMAX)<br/>Cartuchos: 5 + Kaliber: 12,7x99mm (AMAX)<br />Lövedékek: 5 \ No newline at end of file diff --git a/addons/captives/XEH_postInit.sqf b/addons/captives/XEH_postInit.sqf index f91f24025e..da2192d3d6 100644 --- a/addons/captives/XEH_postInit.sqf +++ b/addons/captives/XEH_postInit.sqf @@ -11,7 +11,7 @@ if (isServer) then { _escortedUnit = _disconnectedPlayer getVariable [QGVAR(escortedUnit), objNull]; if ((!isNull _escortedUnit) && {(attachedTo _escortedUnit) == _disconnectedPlayer}) then { detach _escortedUnit; - systemChat "debug: DC detach"; + //systemChat "debug: DC detach"; }; if (_disconnectedPlayer getVariable [QGVAR(isEscorting), false]) then { _disconnectedPlayer setVariable [QGVAR(isEscorting), false, true]; diff --git a/addons/captives/functions/fnc_canSurrender.sqf b/addons/captives/functions/fnc_canSurrender.sqf index 3b810a0c5c..9ba7cf6de0 100644 --- a/addons/captives/functions/fnc_canSurrender.sqf +++ b/addons/captives/functions/fnc_canSurrender.sqf @@ -1,6 +1,6 @@ /* * Author: PabstMirror - * Checks the conditions for being able to surrender + * Checks the conditions for being able switch surrender states * * Arguments: * 0: caller (player) @@ -18,14 +18,14 @@ PARAMS_2(_unit,_newSurrenderState); -if (currentWeapon _unit != "") exitWith {false}; - private "_returnValue"; _returnValue = if (_newSurrenderState) then { - !(_unit getVariable [QGVAR(isSurrendering), false]); //Not currently surrendering + //no weapon equiped AND not currently surrendering and + (currentWeapon _unit == "") && {!(_unit getVariable [QGVAR(isSurrendering), false])} } else { - (_unit getVariable [QGVAR(isSurrendering), false]); //is Surrendering + //is Surrendering + (_unit getVariable [QGVAR(isSurrendering), false]) }; _returnValue diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 55a9f6211a..def173c55b 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -8,7 +8,7 @@ Capturer le prisonnier Aresztuj Zajmout Osobu - Arresta il Prigioniero + Arresta il prigioniero Tomar Prisioneiro Foglyul ejtés Взять в плен @@ -20,7 +20,7 @@ Wypuść więźnia Libérer le prisonnier Osvobodit Zajatce - Libera il Prigioniero + Libera il prigioniero Libertar Prisioneiro Fogoly szabadon engedése Освободить пленника @@ -71,7 +71,7 @@ Fogoly berakása Загрузить пленного Embarcar Prisioneiro - Carica il prigioniero + Fai salire il prigioniero Unload Captive @@ -83,7 +83,7 @@ Fogoly kivevése Выгрузить пленного Desembarcar Prisioneiro - Scarica il prigioniero + Fai scendere il prigioniero Cable Tie @@ -105,7 +105,7 @@ Les Serflex permettent de menotter les prisonniers. Stahovací pásky vám umožní zadržet vězně. A algema plástica permite que você contenha prisioneiros. - Fascietta che ti consente di arrestare i prigionieri. + Fascetta per arrestare i prigionieri Gyorskötöző, emberek foglyulejtéséhez használható. Кабельные стяжки позволяют связывать пленников. @@ -119,6 +119,7 @@ Ekwipunek rewidowanej osoby Инвентарь обысканного человека Inventário da pessoa revistada + Inventario della persona perquisita Frisk person @@ -137,22 +138,24 @@ Se rendre Kapitulieren Rendirse + Render-se Vzdát se Poddaj się Сдаться Megadás - Arreso + Arrenditi Stop Surrendering Annuler la capitulation Den Kampf erneut aufnehmen Dejar de rendirse + Parar de se render Přestat se vzdávat Podejmij walkę ponownie Прекратить сдачу в плен Megadás abbahagyása - Annulla la resa + Smetti di arrenderti Only use on alive units @@ -164,6 +167,7 @@ Применимо только к живым юнитам Csak élő egységeken használni Si può fare solo su persone vive + Usar somente em unidades vivas Only use on dismounted inf @@ -175,17 +179,19 @@ Применимо только к пехоте вне техники Csak járműben kívül lévő egységeken használni Si può usare solo su fanteria a piedi + Usar somente em infantaria desmontada Nothing under mouse Rien sous le curseur Es wurde nichts ausgewählt Nada bajo el ratón + Nada debaixo do mouse Nic není vybráno Nie ma nic pod kursorem Ничего не выделено Semmi sincs az egér alatt - Niente selezionato + Nessuna selezione diff --git a/addons/common/CfgEventHandlers.hpp b/addons/common/CfgEventHandlers.hpp index ce0938f063..bea7b6e7bc 100644 --- a/addons/common/CfgEventHandlers.hpp +++ b/addons/common/CfgEventHandlers.hpp @@ -24,7 +24,7 @@ class Extended_InitPost_EventHandlers { init = QUOTE(if (local (_this select 0)) then {_this call FUNC(setName)};); }; class GVAR(forceWalk) { - init = QUOTE(if (local (_this select 0)) then {_this call FUNC(applyForceWalkStatus);};); + init = QUOTE(_this call FUNC(applyForceWalkStatus)); }; class GVAR(muteUnit) { init = QUOTE(_this call FUNC(muteUnitHandleInitPost)); diff --git a/addons/common/CfgUnitInsignia.hpp b/addons/common/CfgUnitInsignia.hpp new file mode 100644 index 0000000000..aba82823c9 --- /dev/null +++ b/addons/common/CfgUnitInsignia.hpp @@ -0,0 +1,15 @@ + +class CfgUnitInsignia { + class ACE_insignia_logo { + displayName = "ACE3"; + author = "$STR_ACE_Common_ACETeam"; + texture = PATHTOF(data\Insignia_ace3logo_ca.paa); + textureVehicle = ""; + }; + class ACE_insignia_banana { + displayName = "ABE3"; + author = "$STR_ACE_Common_ACETeam"; + texture = PATHTOF(data\insignia_banana_ca.paa); + textureVehicle = ""; + }; +}; diff --git a/addons/common/CfgWeapons.hpp b/addons/common/CfgWeapons.hpp index cf8c06798e..59bb8f6b9a 100644 --- a/addons/common/CfgWeapons.hpp +++ b/addons/common/CfgWeapons.hpp @@ -15,7 +15,7 @@ class CfgWeapons { class ACE_FakePrimaryWeapon: Rifle_Base_F { scope = 2; scopeCurator = 1; - + scopeArsenal = 1; displayName = ""; model = "\A3\Weapons_f\empty"; picture = ""; diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 7dc07743ed..696aa16f9b 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -64,8 +64,6 @@ if (_currentVersion != _previousVersion) then { profileNamespace setVariable ["ACE_VersionNumberString", _currentVersion]; }; -0 spawn COMPILE_FILE(scripts\Version\checkVersionNumber); - // ACE events "ACEg" addPublicVariableEventHandler { _this call FUNC(_handleNetEvent); }; "ACEc" addPublicVariableEventHandler { _this call FUNC(_handleNetEvent); }; @@ -73,7 +71,7 @@ if (_currentVersion != _previousVersion) then { // Synced ACE events // Handle JIP scenario if(!isServer) then { - ["PlayerJip", { + ["PlayerJip", { diag_log text format["[ACE] * JIP event synchronization initialized"]; ["SEH_all", [player]] call FUNC(serverEvent); }] call FUNC(addEventHandler); @@ -84,6 +82,7 @@ if(!isServer) then { ["SEH_s", FUNC(_handleRequestSyncedEvent)] call FUNC(addEventHandler); [FUNC(syncedEventPFH), 0.5, []] call cba_fnc_addPerFrameHandler; +call FUNC(checkFiles); /***************************************************************/ /***************************************************************/ @@ -112,7 +111,7 @@ enableCamShake true; // Set the name for the current player ["playerChanged", { EXPLODE_2_PVT(_this,_newPlayer,_oldPlayer); - + if (alive _newPlayer) then { [_newPlayer] call FUNC(setName) }; @@ -227,6 +226,7 @@ GVAR(OldIsCamera) = false; ["displayTextStructured", FUNC(displayTextStructured)] call FUNC(addEventhandler); ["displayTextPicture", FUNC(displayTextPicture)] call FUNC(addEventhandler); +["medical_onUnconscious", {if (local (_this select 0) && {!(_this select 1)}) then {[ _this select 0, false, QUOTE(FUNC(loadPerson)), west /* dummy side */] call FUNC(switchToGroupSide);};}] call FUNC(addEventhandler); ["notOnMap", {!visibleMap}] call FUNC(addCanInteractWithCondition); ["isNotInside", { @@ -243,20 +243,9 @@ GVAR(OldIsCamera) = false; if(isMultiplayer && { time > 0 || isNull player } ) then { // We are jipping! Get ready and wait, and throw the event [{ - if(!(isNull player)) then { + if(!(isNull player)) then { ["PlayerJip", [player] ] call FUNC(localEvent); [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; + }; }, 0, []] call cba_fnc_addPerFrameHandler; }; - -// check dlls -{ - if (_x callExtension "version" == "") then { - private "_errorMsg"; - _errorMsg = format ["Extension %1.dll not installed.", _x]; - - diag_log text format ["[ACE] ERROR: %1", _errorMsg]; - ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); - }; -} forEach getArray (configFile >> "ACE_Extensions" >> "extensions"); diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 54a5118cb0..7c8f36163a 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -21,6 +21,7 @@ PREP(canInteract); PREP(canInteractWith); PREP(canUseWeapon); PREP(changeProjectileDirection); +PREP(checkFiles); PREP(checkPBOs); PREP(claim); PREP(closeDialogIfTargetMoves); @@ -182,6 +183,7 @@ PREP(unmuteUnit); PREP(useItem); PREP(useMagazine); PREP(waitAndExecute); +PREP(waveHeightAt); PREP(translateToWeaponSpace); PREP(translateToModelSpace); @@ -311,6 +313,16 @@ if (hasInterface) then { }, 0, []] call cba_fnc_addPerFrameHandler; }; +// Time handling +ACE_time = diag_tickTime; +ACE_realTime = diag_tickTime; +ACE_virtualTime = diag_tickTime; +ACE_diagTime = diag_tickTime; +ACE_gameTime = time; + +PREP(timePFH); +[FUNC(timePFH), 0, []] call cba_fnc_addPerFrameHandler; + // Init toHex [0] call FUNC(toHex); diff --git a/addons/common/config.cpp b/addons/common/config.cpp index 16bd13fc0c..27647f8d00 100644 --- a/addons/common/config.cpp +++ b/addons/common/config.cpp @@ -22,6 +22,7 @@ class CfgPatches { #include "CfgActions.hpp" #include "CfgMoves.hpp" #include "CfgVoice.hpp" +#include "CfgUnitInsignia.hpp" class ACE_Rsc_Display_Base { idd = -1; diff --git a/addons/common/data/insignia_ace3logo_ca.paa b/addons/common/data/insignia_ace3logo_ca.paa new file mode 100644 index 0000000000..5a8ca321d7 Binary files /dev/null and b/addons/common/data/insignia_ace3logo_ca.paa differ diff --git a/addons/common/data/insignia_banana_ca.paa b/addons/common/data/insignia_banana_ca.paa new file mode 100644 index 0000000000..379fd9c733 Binary files /dev/null and b/addons/common/data/insignia_banana_ca.paa differ diff --git a/addons/common/functions/fnc_checkFiles.sqf b/addons/common/functions/fnc_checkFiles.sqf new file mode 100644 index 0000000000..b0ea8a5200 --- /dev/null +++ b/addons/common/functions/fnc_checkFiles.sqf @@ -0,0 +1,85 @@ +/* + * Author: commy2 + * + * Compares version numbers of PBOs and DLLs. + * + * Argument: + * None. + * + * Return value: + * None. + */ +#include "script_component.hpp" + +/////////////// +// check addons +/////////////// +private "_version"; +_version = getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr"); + +diag_log text format ["[ACE]: ACE is version %1.", _version]; + +private "_addons"; +_addons = activatedAddons; +_addons = [_addons, {_this find "ace_" == 0}] call FUNC(filter); + +{ + if (getText (configFile >> "CfgPatches" >> _x >> "versionStr") != _version) then { + private "_errorMsg"; + _errorMsg = format ["File %1.pbo is outdated.", _x]; + + diag_log text format ["[ACE] ERROR: %1", _errorMsg]; + + if (hasInterface) then { + ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); + }; + }; +} forEach _addons; + +/////////////// +// check dlls +/////////////// +{ + if (_x callExtension "version" == "") then { + private "_errorMsg"; + _errorMsg = format ["Extension %1.dll not installed.", _x]; + + diag_log text format ["[ACE] ERROR: %1", _errorMsg]; + + if (hasInterface) then { + ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); + }; + }; +} forEach getArray (configFile >> "ACE_Extensions" >> "extensions"); + +/////////////// +// check server version +/////////////// +if (isMultiplayer) then { + if (isServer) then { + // send servers version of ACE to all clients + GVAR(ServerVersion) = _version; + publicVariable QGVAR(ServerVersion); + } else { + // clients have to wait for the variable + [{ + if (isNil QGVAR(ServerVersion)) exitWith {}; + + private "_version"; + _version = _this select 0; + + if (_version != GVAR(ServerVersion)) then { + private "_errorMsg"; + _errorMsg = format ["Client/Server Version Mismatch. Server: %1, Client: %2.", GVAR(ServerVersion), _version]; + + diag_log text format ["[ACE] ERROR: %1", _errorMsg]; + + if (hasInterface) then {diag_log str "1"; + ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); + }; + }; + + [_this select 1] call CBA_fnc_removePerFrameHandler; + }, 1, _version] call CBA_fnc_addPerFrameHandler; + }; +}; diff --git a/addons/common/functions/fnc_checkPBOs.sqf b/addons/common/functions/fnc_checkPBOs.sqf index 7c4aaeba13..2b738e2f1a 100644 --- a/addons/common/functions/fnc_checkPBOs.sqf +++ b/addons/common/functions/fnc_checkPBOs.sqf @@ -25,11 +25,11 @@ _checkAll = _this select 1; _whitelist = _this select 2; if (isNil "_checkAll") then { - _checkAll = false; + _checkAll = false; }; if (isNil "_whitelist") then { - _whitelist = "[]"; + _whitelist = "[]"; }; _logic = "Logic" createVehicleLocal [0,0,0]; diff --git a/addons/common/functions/fnc_errorMessage.sqf b/addons/common/functions/fnc_errorMessage.sqf index e061772942..9665fed5bb 100644 --- a/addons/common/functions/fnc_errorMessage.sqf +++ b/addons/common/functions/fnc_errorMessage.sqf @@ -15,6 +15,21 @@ disableSerialization; endLoadingScreen; + +// no message without player possible +if (!hasInterface) exitWith {}; + +// wait for display +if (isNull (call BIS_fnc_displayMission)) exitWith { + [{ + if (isNull (call BIS_fnc_displayMission)) exitWith {}; + + (_this select 0) call FUNC(errorMessage); + [_this select 1] call CBA_fnc_removePerFrameHandler; + + }, 1, _this] call CBA_fnc_addPerFrameHandler; +}; + private ["_textHeader", "_textMessage", "_onOK", "_onCancel"]; _textHeader = _this select 0; diff --git a/addons/common/functions/fnc_getDeathAnim.sqf b/addons/common/functions/fnc_getDeathAnim.sqf index d5185e6562..1e84224b0f 100644 --- a/addons/common/functions/fnc_getDeathAnim.sqf +++ b/addons/common/functions/fnc_getDeathAnim.sqf @@ -1,38 +1,51 @@ -/** - * fn_getDeathAnim.sqf - * @Descr: Get the death animation for the unit at current time - * @Author: Glowbal +/* + * Author: Glowbal, PabstMirror + * Get the death animation for the unit at current time * - * @Arguments: [unit OBJECT] - * @Return: STRING animation - * @PublicAPI: true + * Arguments: + * 0: unit + * + * Return Value: + * animation + * + * Example: + * [bob] call ace_common_fnc_getDeathAnim; + * + * Public: No */ #include "script_component.hpp" -private ["_unit", "_curAnim", "_animation", "_cfg","_unitAnimation", "_animationState"]; -_unit = _this select 0; +PARAMS_1(_unit); -if (vehicle _unit != _unit) exitwith { - _animation = ""; - _animationState = (animationState _unit); - _unitAnimation = (configFile >> "CfgMovesMaleSdr" >> "States" >> _animationState); - if (isText (_unitAnimation >> "actions")) then { - if ((vehicle _unit) != _unit) then { - _cfg = (configFile >> "CfgMovesMaleSdr" >> "States" >> _animationState); - if (isArray (_cfg >> "interpolateTo")) then { - _animation = getArray (_cfg >> "interpolateTo") select 0; - }; - } else { - _cfg = (configFile >> "CfgMovesBasic" >> "Actions" >> (getText (_unitAnimation >> "actions")) >> "die"); - if (isText _cfg) then { - _animation = getText _cfg; - }; +private ["_returnAnimation", "_animationState", "_unitAnimationCfg", "_unitActionsCfg", "_interpolateArray", "_indexAnimation", "_index"]; + +_returnAnimation = ""; + +_animationState = (animationState _unit); +_unitAnimationCfg = (configFile >> "CfgMovesMaleSdr" >> "States" >> _animationState); +//If we're already in a terminal animation just return current +if ((getNumber (_unitAnimationCfg >> "terminal")) == 1) exitWith {_animationState}; + +_unitActionsCfg = (configFile >> "CfgMovesBasic" >> "Actions" >> (getText (_unitAnimationCfg >> "actions"))); + +TRACE_2("Animation/Action", configName _unitAnimationCfg, configName _unitActionsCfg); + +if ((vehicle _unit) != _unit) then { + _interpolateArray = getArray (_unitAnimationCfg >> "interpolateTo"); + for "_index" from 0 to (count _interpolateArray - 1) step 2 do { + _indexAnimation = _interpolateArray select _index; + //No guarentee that first animation will be right so scan for the first "terminal" animation + //E.G.: interpolateTo[] = {"passenger_apc_generic04still",1,"KIA_passenger_apc_generic04",1}; + + if ((getNumber ((configFile >> "CfgMovesMaleSdr" >> "States" >> _indexAnimation) >> "terminal")) == 1) exitWith { + _returnAnimation = _indexAnimation; }; }; - if (isnil "_animation") then { - _animation = ""; - }; - _animation; +} else { + _returnAnimation = getText (_unitActionsCfg >> "die"); }; -"Unconscious"; +//Fallback if nothing valid found: +if (_returnAnimation == "") then {_returnAnimation = "Unconscious"}; + +_returnAnimation diff --git a/addons/common/functions/fnc_loadPersonLocal.sqf b/addons/common/functions/fnc_loadPersonLocal.sqf index 6e31050cf9..ccde28b9aa 100644 --- a/addons/common/functions/fnc_loadPersonLocal.sqf +++ b/addons/common/functions/fnc_loadPersonLocal.sqf @@ -30,7 +30,12 @@ if (!([_unit] call FUNC(isAwake))) then { _vehicle = _this select 1; waituntil {vehicle _unit == _vehicle}; sleep 0.5; - [_unit,([_unit] call FUNC(getDeathAnim)), 1] call FUNC(doAnimation); + + //Save the "awake" animation before applying the death animation + if (vehicle _unit == _vehicle) then { + _unit setVariable [QEGVAR(medical,vehicleAwakeAnim), [_vehicle, (animationState _unit)]]; + }; + [_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call FUNC(doAnimation); }; } else { if ([_unit] call FUNC(isArrested)) then { diff --git a/addons/common/functions/fnc_loadSettingsOnServer.sqf b/addons/common/functions/fnc_loadSettingsOnServer.sqf index 9255d047b3..61431ff220 100644 --- a/addons/common/functions/fnc_loadSettingsOnServer.sqf +++ b/addons/common/functions/fnc_loadSettingsOnServer.sqf @@ -13,6 +13,8 @@ */ #include "script_component.hpp" +private ["_parseConfigForSettings"]; + GVAR(settings) = []; _parseConfigForSettings = { diff --git a/addons/common/functions/fnc_moduleCheckPBOs.sqf b/addons/common/functions/fnc_moduleCheckPBOs.sqf index 4b5ea2374a..7137f1ea1d 100644 --- a/addons/common/functions/fnc_moduleCheckPBOs.sqf +++ b/addons/common/functions/fnc_moduleCheckPBOs.sqf @@ -22,7 +22,7 @@ _checkAll = _logic getVariable ["CheckAll", false]; _whitelist = call compile (_logic getVariable ["Whitelist", "[]"]); if (isNil "_whitelist") then { - _whitelist = []; + _whitelist = []; }; _whitelist = [_whitelist, {toLower _this}] call FUNC(map); @@ -31,67 +31,71 @@ ACE_Version_CheckAll = _checkAll; ACE_Version_Whitelist = _whitelist; if (!isServer) then { - [_mode, _checkAll, _whitelist] spawn { - _mode = _this select 0; - _checkAll = _this select 1; - _whitelist = _this select 2; + [_mode, _checkAll, _whitelist] spawn { + _mode = _this select 0; + _checkAll = _this select 1; + _whitelist = _this select 2; - waitUntil { - sleep 1; - !isNil "ACE_Version_ClientErrors" + waitUntil { + sleep 1; + !isNil "ACE_Version_ClientErrors" + }; + + _missingAddon = ACE_Version_ClientErrors select 0; + _missingAddonServer = ACE_Version_ClientErrors select 1; + _oldVersionClient = ACE_Version_ClientErrors select 2; + _oldVersionServer = ACE_Version_ClientErrors select 3; + + // Display error message. + if (_missingAddon || {_missingAddonServer} || {_oldVersionClient} || {_oldVersionServer}) then { + _text = "[ACE] Version mismatch:

"; + _error = format ["ACE version mismatch: %1: ", profileName]; + + if (_missingAddon) then { + _text = _text + "Detected missing addon on client
"; + _error = _error + "Missing file(s); "; + }; + if (_missingAddonServer) then { + _text = _text + "Detected missing addon on server
"; + _error = _error + "Additional file(s); "; + }; + if (_oldVersionClient) then { + _text = _text + "Detected old client version
"; + _error = _error + "Older version; "; + }; + if (_oldVersionServer) then { + _text = _text + "Detected old server version
"; + _error = _error + "Newer version; "; + }; + + //[_error, "{systemChat _this}"] call FUNC(execRemoteFnc); + diag_log text _error; + + _text = composeText [lineBreak, parseText format ["%1", _text]]; + + _rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer; + _rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true]; + + disableSerialization; + _ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint"; + _ctrlHint ctrlSetStructuredText _text; + + if (_mode == 0) then { + sleep 10; + _rscLayer cutFadeOut 0.2; + }; + + if (_mode == 2) then { + sleep 10; + waitUntil {alive player}; + [player] call FUNC(adminKick); + }; + }; }; - - _missingAddon = ACE_Version_ClientErrors select 0; - _missingAddonServer = ACE_Version_ClientErrors select 1; - _oldVersionClient = ACE_Version_ClientErrors select 2; - _oldVersionServer = ACE_Version_ClientErrors select 3; - - // Display error message. - if (_missingAddon || {_missingAddonServer} || {_oldVersionClient} || {_oldVersionServer}) then { - _text = "[ACE] Version mismatch:

"; - _error = format ["ACE version mismatch: %1: ", profileName]; - - if (_missingAddon) then { - _text = _text + "Detected missing addon on client
"; - _error = _error + "Missing file(s); "; - }; - if (_missingAddonServer) then { - _text = _text + "Detected missing addon on server
"; - _error = _error + "Additional file(s); "; - }; - if (_oldVersionClient) then { - _text = _text + "Detected old client version
"; - _error = _error + "Older version; "; - }; - if (_oldVersionServer) then { - _text = _text + "Detected old server version
"; - _error = _error + "Newer version; "; - }; - - //[_error, "{systemChat _this}"] call FUNC(execRemoteFnc); - diag_log text _error; - - _text = composeText [lineBreak, parseText format ["%1", _text]]; - - _rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer; - _rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true]; - - disableSerialization; - _ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint"; - _ctrlHint ctrlSetStructuredText _text; - - if (_mode == 0) then { - sleep 10; - _rscLayer cutFadeOut 0.2; - }; - - if (_mode == 2) then { - sleep 10; - waitUntil {alive player}; - [player] call FUNC(adminKick); - }; - }; - }; }; diag_log text format ["[ACE]: Check-PBOs Module Initialized. Mode: %1.", _mode]; + +if (_checkAll) then { + 0 spawn COMPILE_FILE(scripts\Version\checkVersionNumber); +}; diff --git a/addons/common/functions/fnc_resetAllDefaults.sqf b/addons/common/functions/fnc_resetAllDefaults.sqf index 63e6764d01..64a8e39fa6 100644 --- a/addons/common/functions/fnc_resetAllDefaults.sqf +++ b/addons/common/functions/fnc_resetAllDefaults.sqf @@ -37,3 +37,4 @@ if (isPlayer _unit) then { }; }foreach ([_unit] call FUNC(getAllDefinedSetVariables)); +_unit setVariable ["ACE_forceWalkStatusNumber", 0, true]; diff --git a/addons/common/functions/fnc_setForceWalkStatus.sqf b/addons/common/functions/fnc_setForceWalkStatus.sqf index 52b674015f..477f76297d 100644 --- a/addons/common/functions/fnc_setForceWalkStatus.sqf +++ b/addons/common/functions/fnc_setForceWalkStatus.sqf @@ -50,4 +50,4 @@ _bitmaskNumber = _forceWalkReasonsBooleans call FUNC(toBitmask); _unit setVariable ["ACE_forceWalkStatusNumber", _bitmaskNumber, true]; // actually apply the forceWalk command globaly -[[_unit], QUOTE(FUNC(applyForceWalkStatus)), _unit] call FUNC(execRemoteFnc); +[[_unit], QUOTE(FUNC(applyForceWalkStatus)), 2] call FUNC(execRemoteFnc); diff --git a/addons/common/functions/fnc_setSetting.sqf b/addons/common/functions/fnc_setSetting.sqf index 67068c6ad1..84ba255758 100644 --- a/addons/common/functions/fnc_setSetting.sqf +++ b/addons/common/functions/fnc_setSetting.sqf @@ -17,7 +17,7 @@ */ #include "script_component.hpp" -private ["_name","_value"]; +private ["_name","_value", "_force", "_settingData","_failed"]; _name = _this select 0; _value = _this select 1; diff --git a/addons/common/functions/fnc_setSettingFromConfig.sqf b/addons/common/functions/fnc_setSettingFromConfig.sqf index 3a1b6fd055..0b5d4ab767 100644 --- a/addons/common/functions/fnc_setSettingFromConfig.sqf +++ b/addons/common/functions/fnc_setSettingFromConfig.sqf @@ -14,6 +14,8 @@ EXPLODE_1_PVT(_this,_optionEntry); +private ["_fnc_getValueWithType", "_value","_name", "_typeName", "_settingData"]; + _fnc_getValueWithType = { EXPLODE_2_PVT(_this,_optionEntry,_typeName); diff --git a/addons/common/functions/fnc_timePFH.sqf b/addons/common/functions/fnc_timePFH.sqf new file mode 100644 index 0000000000..ee8fe4a9bb --- /dev/null +++ b/addons/common/functions/fnc_timePFH.sqf @@ -0,0 +1,25 @@ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +private["_lastTime", "_lastRealTime", "_lastVirtualTime", "_lastGameTime", "_delta"]; + +_lastRealTime = ACE_realTime; +_lastGameTime = ACE_gameTime; + +ACE_gameTime = time; +ACE_diagTime = diag_tickTime; + +_delta = ACE_diagTime - _lastRealTime; +if(ACE_gameTime <= _lastGameTime) then { + ACE_paused = true; + // Game is paused or not running + ACE_pausedTime = ACE_pausedTime + _delta; + ACE_virtualPausedTime = ACE_pausedTime + (_delta * accTime); +} else { + ACE_paused = false; + // Time is updating + ACE_realTime = ACE_realTime + _delta; + ACE_virtualTime = ACE_virtualTime + (_delta * accTime); + ACE_time = ACE_virtualTime; +}; + diff --git a/addons/common/functions/fnc_unloadPerson.sqf b/addons/common/functions/fnc_unloadPerson.sqf index 33c0e9c0c2..60e4f56d7d 100644 --- a/addons/common/functions/fnc_unloadPerson.sqf +++ b/addons/common/functions/fnc_unloadPerson.sqf @@ -1,59 +1,44 @@ -/** - * fn_unloadPerson_f.sqf - * @Descr: Unload a person from a vehicle - * @Author: Glowbal +/* + * Author: Glowbal + * Unload a person from a vehicle * - * @Arguments: [caller OBJECT, unit OBJECT] - * @Return: BOOL Returns true if succesfully unloaded person - * @PublicAPI: true + * Arguments: + * 0: unit + * + * Return Value: + * Returns true if succesfully unloaded person + * + * Public: No */ #include "script_component.hpp" #define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson)) -private ["_caller", "_unit","_vehicle", "_loaded"]; -_caller = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; -_unit = [_this, 1, ObjNull,[ObjNull]] call BIS_fnc_Param; +private ["_unit","_vehicle", "_loaded", "_emptyPos"]; +_unit = _this select 0; _vehicle = vehicle _unit; if (_vehicle == _unit) exitwith {false;}; if !(speed _vehicle <1 && (((getpos _vehicle) select 2) < 2)) exitwith {false;}; -if (!([_caller] call FUNC(isAwake))) exitwith{false;}; -moveOut _unit; +_emptyPos = ((getPos _vehicle) findEmptyPosition [0, 10, typeof _unit]); +if (count _emptyPos == 0) exitwith {false}; + +_unit setPos _emptyPos; unassignVehicle _unit; if (!alive _unit) then { _unit action ["Eject", vehicle _unit]; }; -[_unit, false, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide); +[_unit, false, GROUP_SWITCH_ID, side group _unit] call FUNC(switchToGroupSide); _loaded = _vehicle getvariable [QGVAR(loaded_persons),[]]; _loaded = _loaded - [_unit]; _vehicle setvariable [QGVAR(loaded_persons),_loaded,true]; if (!([_unit] call FUNC(isAwake))) then { - _handle = [_unit,_vehicle] spawn { - private ["_unit","_vehicle"]; - _unit = _this select 0; - _vehicle = _this select 1; - waituntil {vehicle _unit != _vehicle}; - [_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call FUNC(doAnimation); - [format["Unit should move into death anim: %1", _unit]] call FUNC(debug); - }; -} else { - if ([_unit] call FUNC(isArrested)) then { - _handle = [_unit,_vehicle] spawn { - _unit = _this select 0; - _vehicle = _this select 1; - waituntil {vehicle _unit != _vehicle}; - [_unit,"UnaErcPoslechVelitele2", 1] call FUNC(doAnimation); - [format["Unit should move into arrested anim: %1", _unit]] call FUNC(debug); - }; - } else { - [format["Unit should move into normal anim: %1", _unit]] call FUNC(debug); - }; + [_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call FUNC(doAnimation); }; -true; \ No newline at end of file +true; diff --git a/addons/common/functions/fnc_waveHeightAt.sqf b/addons/common/functions/fnc_waveHeightAt.sqf new file mode 100644 index 0000000000..e05e4219b7 --- /dev/null +++ b/addons/common/functions/fnc_waveHeightAt.sqf @@ -0,0 +1,20 @@ +/* + * Author: jaynus + * + * Gets the wave height at a specific location. Uses a logic, so may be performance iffy + * + * Arguments: + * 0: Position ASL to get height at + * + * Return Value: + * Wave height in meters + * + */ +#include "script_component.hpp" + +if(isNil QGVAR(waveHeightLogic)) then { + GVAR(waveHeightLogic) = "Logic" createVehicleLocal [0,0,0]; +}; +GVAR(waveHeightLogic) setPosASL (_this select 0); + +(((getPosASLW GVAR(waveHeightLogic)) select 2) - ((getPosASL GVAR(waveHeightLogic)) select 2)) \ No newline at end of file diff --git a/addons/common/scripts/Version/checkVersionNumber.sqf b/addons/common/scripts/Version/checkVersionNumber.sqf index e6509cd9c4..74f130596a 100644 --- a/addons/common/scripts/Version/checkVersionNumber.sqf +++ b/addons/common/scripts/Version/checkVersionNumber.sqf @@ -1,193 +1,156 @@ // by commy2 #include "script_component.hpp" -sleep 1; //wait for module - _files = []; -if (missionNamespace getVariable ["ACE_Version_CheckAll", false]) then { - { - if (toLower _x find "a3_" != 0 && {!(toLower _x in (missionNamespace getVariable ["ACE_Version_Whitelist", []]))}) then { - _files pushBack _x; +{ + if (_x find "a3_" != 0 && {_x find "ace_" != 0} && {!(toLower _x in (missionNamespace getVariable ["ACE_Version_Whitelist", []]))}) then { + _files pushBack _x; }; - } forEach activatedAddons; -} else { - { - if (toLower _x find "ace_" == 0) then { - _files pushBack _x; - }; - } forEach activatedAddons; -}; - -_versionMain = parseNumber getText (configFile >> "CfgPatches" >> QUOTE(ADDON) >> "version"); +} forEach activatedAddons; _versions = []; { - _version = parseNumber getText (configFile >> "CfgPatches" >> _x >> "version"); - _versions set [_forEachIndex, _version]; + _version = parseNumber getText (configFile >> "CfgPatches" >> _x >> "version"); + _versions set [_forEachIndex, _version]; } forEach _files; -_versionFull = getText (configFile >> "CfgPatches" >> QUOTE(ADDON) >> "versionStr"); -diag_log text format ["[ACE] Full Version Number: %1", _versionFull]; - if (isServer) then { - diag_log text format ["[ACE] Server: ACE_Common is Version %1.", _versionMain]; - - { - if (toLower _x find "ace_" == 0) then {// - _version = _versions select _forEachIndex; - if (_version != _versionMain) then { - diag_log text format ["[ACE] Server: %1 is Version %2.", _x, _version]; - }; - }; - } forEach _files; - - ACE_Version_ServerVersions = [_files, _versions]; - publicVariable "ACE_Version_ServerVersions"; + ACE_Version_ServerVersions = [_files, _versions]; + publicVariable "ACE_Version_ServerVersions"; } else { - diag_log text format ["[ACE] Client: ACE_Common is Version %1.", _versionMain]; - - { - if (toLower _x find "ace_" == 0) then {// - _version = _versions select _forEachIndex; - if (_version != _versionMain) then { - diag_log text format ["[ACE] Client: %1 is Version %2.", _x, _version]; - }; - }; - } forEach _files; - - ACE_Version_ClientVersions = [_files, _versions]; + ACE_Version_ClientVersions = [_files, _versions]; }; // Begin client version check if (!isServer) then { - // Wait for server to send the servers files and version numbers - waitUntil { - sleep 1; - !isNil "ACE_Version_ClientVersions" && {!isNil "ACE_Version_ServerVersions"} - }; - - _client = profileName; - - _files = ACE_Version_ClientVersions select 0; - _versions = ACE_Version_ClientVersions select 1; - - _serverFiles = ACE_Version_ServerVersions select 0; - _serverVersions = ACE_Version_ServerVersions select 1; - - // Compare client and server files and versions - _missingAddons = []; - _oldVersionsClient = []; - _oldVersionsServer = []; - { - _serverVersion = _serverVersions select _forEachIndex; - - _index = _files find _x; - if (_index == -1) then { - if (_x != "ace_serverconfig") then {_missingAddons pushBack _x;}; - } else { - - _clientVersion = _versions select _index; - - if (_clientVersion < _serverVersion) then { - _oldVersionsClient pushBack [_x, _clientVersion, _serverVersion]; - }; - - if (_clientVersion > _serverVersion) then { - _oldVersionsServer pushBack [_x, _clientVersion, _serverVersion]; - }; + // Wait for server to send the servers files and version numbers + waitUntil { + sleep 1; + !isNil "ACE_Version_ClientVersions" && {!isNil "ACE_Version_ServerVersions"} }; - } forEach _serverFiles; - // find client files which the server doesn't have - _missingAddonsServer = []; - { - _index = _serverFiles find _x; - if (_index == -1) then { - _missingAddonsServer pushBack _x; - } - } forEach _files; + _client = profileName; - // display and log error messages - _fnc_cutComma = { - _string = _this; - _string = toArray _string; + _files = ACE_Version_ClientVersions select 0; + _versions = ACE_Version_ClientVersions select 1; - _count = count _string; - _string set [_count - 2, toArray "." select 0]; - _string set [_count - 1, -1]; - _string = _string - [-1]; + _serverFiles = ACE_Version_ServerVersions select 0; + _serverVersions = ACE_Version_ServerVersions select 1; - toString _string; - }; - - _missingAddon = false; - if (count _missingAddons > 0) then { - _missingAddon = true; - - _error = format ["[ACE] %1: ERROR missing addon(s): ", _client]; + // Compare client and server files and versions + _missingAddons = []; + _oldVersionsClient = []; + _oldVersionsServer = []; { - _error = _error + format ["%1, ", _x]; + _serverVersion = _serverVersions select _forEachIndex; - if (_forEachIndex > 9) exitWith {};// - } forEach _missingAddons; + _index = _files find _x; + if (_index == -1) then { + if (_x != "ace_server") then {_missingAddons pushBack _x;}; + } else { - _error = _error call _fnc_cutComma; + _clientVersion = _versions select _index; - diag_log text _error; - [_error, "{systemChat _this}"] call FUNC(execRemoteFnc); - }; + if (_clientVersion < _serverVersion) then { + _oldVersionsClient pushBack [_x, _clientVersion, _serverVersion]; + }; - _missingAddonServer = false; - if (count _missingAddonsServer > 0) then { - _missingAddonServer = true; + if (_clientVersion > _serverVersion) then { + _oldVersionsServer pushBack [_x, _clientVersion, _serverVersion]; + }; + }; + } forEach _serverFiles; - _error = format ["[ACE] %1: ERROR missing server addon(s): ", _client]; + // find client files which the server doesn't have + _missingAddonsServer = []; { - _error = _error + format ["%1, ", _x]; + _index = _serverFiles find _x; + if (_index == -1) then { + _missingAddonsServer pushBack _x; + } + } forEach _files; - if (_forEachIndex > 9) exitWith {};// - } forEach _missingAddonsServer; + // display and log error messages + _fnc_cutComma = { + _string = _this; + _string = toArray _string; - _error = _error call _fnc_cutComma; + _count = count _string; + _string set [_count - 2, toArray "." select 0]; + _string set [_count - 1, -1]; + _string = _string - [-1]; - diag_log text _error; - [_error, "{systemChat _this}"] call FUNC(execRemoteFnc); - }; + toString _string; + }; - _oldVersionClient = false; - if (count _oldVersionsClient > 0) then { - _oldVersionClient = true; + _missingAddon = false; + if (count _missingAddons > 0) then { + _missingAddon = true; - _error = format ["[ACE] %1: ERROR outdated addon(s): ", _client]; - { - _error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2]; + _error = format ["[ACE] %1: ERROR missing addon(s): ", _client]; + { + _error = _error + format ["%1, ", _x]; - if (_forEachIndex > 9) exitWith {};// - } forEach _oldVersionsClient; + if (_forEachIndex > 9) exitWith {};// + } forEach _missingAddons; - _error = _error call _fnc_cutComma; + _error = _error call _fnc_cutComma; - diag_log text _error; - [_error, "{systemChat _this}"] call FUNC(execRemoteFnc); - }; + diag_log text _error; + [_error, "{systemChat _this}"] call FUNC(execRemoteFnc); + }; - _oldVersionServer = false; - if (count _oldVersionsServer > 0) then { - _oldVersionServer = true; + _missingAddonServer = false; + if (count _missingAddonsServer > 0) then { + _missingAddonServer = true; - _error = format ["[ACE] %1: ERROR outdated server addon(s): ", _client]; - { - _error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2]; + _error = format ["[ACE] %1: ERROR missing server addon(s): ", _client]; + { + _error = _error + format ["%1, ", _x]; - if (_forEachIndex > 9) exitWith {};// - } forEach _oldVersionsServer; + if (_forEachIndex > 9) exitWith {};// + } forEach _missingAddonsServer; - _error = _error call _fnc_cutComma; + _error = _error call _fnc_cutComma; - diag_log text _error; - [_error, "{systemChat _this}"] call FUNC(execRemoteFnc); - }; + diag_log text _error; + [_error, "{systemChat _this}"] call FUNC(execRemoteFnc); + }; - ACE_Version_ClientErrors = [_missingAddon, _missingAddonServer, _oldVersionClient, _oldVersionServer]; + _oldVersionClient = false; + if (count _oldVersionsClient > 0) then { + _oldVersionClient = true; + + _error = format ["[ACE] %1: ERROR outdated addon(s): ", _client]; + { + _error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2]; + + if (_forEachIndex > 9) exitWith {};// + } forEach _oldVersionsClient; + + _error = _error call _fnc_cutComma; + + diag_log text _error; + [_error, "{systemChat _this}"] call FUNC(execRemoteFnc); + }; + + _oldVersionServer = false; + if (count _oldVersionsServer > 0) then { + _oldVersionServer = true; + + _error = format ["[ACE] %1: ERROR outdated server addon(s): ", _client]; + { + _error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2]; + + if (_forEachIndex > 9) exitWith {};// + } forEach _oldVersionsServer; + + _error = _error call _fnc_cutComma; + + diag_log text _error; + [_error, "{systemChat _this}"] call FUNC(execRemoteFnc); + }; + + ACE_Version_ClientErrors = [_missingAddon, _missingAddonServer, _oldVersionClient, _oldVersionServer]; }; diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index de10a60893..8d28704362 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -275,7 +275,8 @@ Désactiver menu commande Выключить командное меню Parancsnoki menü kikapcsolása - Disabilita Menù di comando + Disabilita menù di comando + Desabilitar menu de comando Unknown @@ -287,6 +288,7 @@ Ismeretlen Sconosciuto Inconnu + Desconhecido No Voice @@ -298,6 +300,7 @@ Nincs hang Senza voce Pas de voix + Sem voz Accept Requests @@ -305,10 +308,11 @@ Aceptar peticiones Akceptuj prośby Přijmout žádost - Accetta Richieste Accepter requête Принять запросы Kérések elfogadása + Aceitar Pedido + Accetta la richiesta Decline Requests @@ -316,10 +320,11 @@ Rechazar peticiones Ignoruj prośby Zamítnout žádost - Rifiuta Richieste Отклонить запросы Rejeter requête Kérések elutasítása + Rejeitar pedido + Rifiuta la richiesta Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. @@ -331,6 +336,7 @@ Принять запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий Accepter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions. Más játékosok általi kérések elfogadása. Ezek a kérések vonatkozhatnak a felszerelés használatára/megosztására, valamint különböző cselekményekre. + Aceitar pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações. Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. @@ -342,6 +348,7 @@ Отклонить запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий Rejeter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions. Más játékosok általi kérések elutasítása. Ezek a kérések vonatkozhatnak a felszerelés használatára/megosztására, valamint különböző cselekményekre. + Rejeita pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações. Feedback icons @@ -353,6 +360,7 @@ Icones d'information Pomocné ikony Visszajelző ikonok + Ícones de Feedback Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. @@ -364,6 +372,7 @@ Sélection de la position ou la désactivation des icones de feedback. Ces icones vous apportent des informations complémentaires sur votre status et sur les actions en cours. Nastavuje pozici nebo vypíná pomocné ikony. Tyto ikony ukazují extra informace ke stavu postavy a vykonávaných činností. Itt beállítható a visszajelző ikonok képernyőn lévő helyzete és jelenléte. Ezek az ikonok extra visszajelzést biztosítanak a karaktered állapotán és végrehajtott cselekvésein. + Selecione a posição ou disabilite a posição dos ícones de feedback na sua tela. Esses ícones irão aparecer para mostrar feedback extra do status do seu personagem e ações realizadas. Progress bar location @@ -375,61 +384,67 @@ Position de la barre de progression Pozice ukazetele průběhu činnosti Állapotjelző sáv helyzete + Local da barra de progresso Set the desired location of the progress bar on your screen. Setze die gewünschte Position der Fortschrittsanzeige fest. Seleccionar la ubicación deseada de la barra de progreso en tu pantalla - Modifica la posizione su schermo della barra di avanzamento. + Modifica la posizione della barra di avanzamernto sullo schermo Установите желаемое положение строки состояния на экране. Ustaw pożądaną lokalizację paska postępu na ekranie Appliquer la position de la barre de progression sur l'écran Nastavuje pozici ukazetele průběhu činnosti na vaší obrazovce. Itt beállítható az állapotjelző sáv képernyődön lévő helyzete. + Define o local desejado da barra de progresso na sua tela. Hint Background color Hintergrundfarbe der Hinweise Color de fondo de las notificaciones - Sfondo dei Suggerimenti + Colore di sfondo dei suggerimenti Цвет фона всплывающих подсказок Kolor tła powiadomień Notification: couleur de l'arrière plan Barva pozadí nápovědy Súgó háttérszíne + Cor do fundo da hint The color of the background from the ACE hints. Die Hintergrundfarbe der ACE-Hinweise. El color de fondo de las notificaciones del ACE - Il colore di sfondo dei suggerimenti dell'ACE. + Il colore di sfondo dei suggerimenti di ACE. Цвет фона всплывающих подсказок АСЕ. Kolor tła dla powiadomień ACE Notification ACE: couleur de l'arrière plan Barva pozadí ACE nápověd. Az ACE-súgók hátterének színe. + A cor de fundo das hints do ACE. Hint text font color Textfarbe der Hinweise Color del texto de las notificaciones - Testo dei Suggerimenti + Il colore del testo dei suggerimenti Цвет шрифта всплывающих подсказок Kolor tekstu powiadomień Notification: couleur du texte Barva fontu nápověd. Súgószöveg betűinek színe + Cor do do texto da hint The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. Wähle die Textfarbe für ACE-Hinweise. Die gewählte Farbe wird als Standartfarbe der Hinweise angezeigt, wenn der Hinweis selbst keine spezifische Farbe hat. El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado. - Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato. + Il colore del testo dei suggerimenti di ACE. Questo è il colore predefinito per tutto il testo mostrato dal sistema di suggerimenti di ACE quando il colore del testo non ha altro colore specificato. Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. Kolor tekstu dla powiadomień ACE. Ten kolor jest domyślnym dla wszystkich tekstów wyświetlanych poprzez System Powiadomień ACE, jeżeli dla powiadomienia nie określono innego koloru. Notification ACE: couleur du texte. C'est la couleur par défaut de tout texte affiché dans les notifications ACE, si aucune couleur n'est spécifiée pour les notifications Barva fontu ACE nápověd. Toto je standardní barva pro všechen text zobrazovaný ACE nápovědami, pokud nemá nápověda žádnou specifikanou barvu. Az ACE-súgók betűkészletének színek. Ez a szín alapértelmezett az összes szövegre az ACE-súgórendszerben, ha a súgószöveg maga nem ad meg más színt. + A cor do texto das hints do ACE. Essa cor é a cor default para todos os texos exibidos pelo sistema de hints do ACE , caso o texto da hint não tem outra cor especificada. Banana @@ -441,17 +456,19 @@ Banan Banane Banán + Banana A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa. Banán je protáhlé ovoce a plod banánovníku (epigeická bobule). - Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotto da un gran numero di grandi pianti erbacee dotate di fiori, della famiglia delle Musaceae. + Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotta da un gran numero di grandi piante erbacee dotate di fiori, della famiglia delle Musaceae. Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). A banán egy ehető gyümölcs, technikai szempontból bogyótermés, melyet több fürtvirágzatú növény termel a Musa rendszertani nemzetségben. Rodzaj roślin z rodziny bananowatych, obejmujący około 80 gatunków.<br />Przedstawiciele są typowymi przedstawicielami flory międzyzwrotnikowej Azji, Afryki i Australii.<br />Część gatunków dostarcza jadalnych owoców. Słowo banan pochodzi prawdopodobnie od arabskiego słowa banan, co oznacza palec, lub afrykańskiego języka wolof, w którym rośliny te określa się mianem banaana. Une banane est un fruit qui, d'un point de vue botanique, fait partie du groupe des baies. Produite par plusieurs sortes de grandes plantes à fleurs herbacées du type Musa. + A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa. - \ No newline at end of file + diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index 2cb3e89b5d..bc9abbf127 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -79,7 +79,7 @@ _holderMagazinesStart = magazinesAmmoCargo _holder; { EXPLODE_2_PVT(_x,_xClassname,_xAmmo); - if ((_xClassname in _listOfItemsToRemove) && {!(_xClassname in UNIQUE_MAGAZINES)}) then { + if ((_xClassname in _listOfItemsToRemove) && {(getNumber (configFile >> "CfgMagazines" >> _xClassname >> "ACE_isUnique")) == 0}) then { _holder addMagazineAmmoCargo [_xClassname, 1, _xAmmo]; _target removeMagazine _xClassname; }; @@ -89,7 +89,7 @@ _targetMagazinesEnd = magazinesAmmo _target; _holderMagazinesEnd = magazinesAmmoCargo _holder; //Verify Mags dropped from unit: -if ( ({((_x select 0) in _listOfItemsToRemove) && {!((_x select 0) in UNIQUE_MAGAZINES)}} count _targetMagazinesEnd) != 0) exitWith { +if (({((_x select 0) in _listOfItemsToRemove) && {(getNumber (configFile >> "CfgMagazines" >> (_x select 0) >> "ACE_isUnique")) == 0}} count _targetMagazinesEnd) != 0) exitWith { _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Didn't Remove Magazines"] call FUNC(eventTargetFinish); }; @@ -102,7 +102,7 @@ if (!([_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holde //Remove Items, Assigned Items and NVG _holderItemsStart = getitemCargo _holder; -_targetItemsStart = (assignedItems _target) + (items _target); +_targetItemsStart = (assignedItems _target) + (items _target) - (weapons _target); if ((headgear _target) != "") then {_targetItemsStart pushBack (headgear _target);}; if ((goggles _target) != "") then {_targetItemsStart pushBack (goggles _target);}; @@ -132,7 +132,7 @@ _addToCrateCount = []; } forEach _addToCrateClassnames; _holderItemsEnd = getitemCargo _holder; -_targetItemsEnd = (assignedItems _target) + (items _target); +_targetItemsEnd = (assignedItems _target) + (items _target) - (weapons _target); if ((headgear _target) != "") then {_targetItemsEnd pushBack (headgear _target);}; if ((goggles _target) != "") then {_targetItemsEnd pushBack (goggles _target);}; @@ -146,6 +146,16 @@ if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select [_caller, _target, "Debug: Items Not Added to Holder"] call FUNC(eventTargetFinish); }; +//Script drop uniforms/vest if empty +if (((uniform _target) != "") && {(uniform _target) in _listOfItemsToRemove} && {(uniformItems _target) isEqualTo []}) then { + _holder addItemCargoGlobal [(uniform _target), 1]; + removeUniform _target; +}; +if (((vest _target) != "") && {(vest _target) in _listOfItemsToRemove} && {(vestItems _target) isEqualTo []}) then { + _holder addItemCargoGlobal [(vest _target), 1]; + removeVest _target; +}; + //If holder is still empty, it will be 'garbage collected' while we wait for the drop 'action' to take place //So add a dummy item and just remove at the end diff --git a/addons/disarming/functions/fnc_getAllGearUnit.sqf b/addons/disarming/functions/fnc_getAllGearUnit.sqf index a319c006ee..99d4b2d7f2 100644 --- a/addons/disarming/functions/fnc_getAllGearUnit.sqf +++ b/addons/disarming/functions/fnc_getAllGearUnit.sqf @@ -19,7 +19,7 @@ PARAMS_1(_target); private ["_allItems", "_classnamesCount", "_index", "_uniqueClassnames"]; -_allItems = ((weapons _target) + (magazines _target) + (items _target) + (assignedItems _target)); +_allItems = (((items _target) + (assignedItems _target)) - (weapons _target)) + (weapons _target) + (magazines _target); if ((backpack _target) != "") then { _allItems pushBack (backpack _target); diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf index 832f32ced5..88e0e81be8 100644 --- a/addons/disarming/functions/fnc_openDisarmDialog.sqf +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -60,7 +60,7 @@ GVAR(disarmTarget) = _target; //Setup PFEH [{ - private ["_groundContainer", "_targetContainer", "_playerName", "_rankPicture", "_rankIndex", "_targetUniqueItems", "_holderUniqueItems"]; + private ["_groundContainer", "_targetContainer", "_playerName", "_rankPicture", "_rankIndex", "_targetUniqueItems", "_holderUniqueItems", "_holder"]; disableSerialization; EXPLODE_2_PVT(_this,_args,_pfID); EXPLODE_3_PVT(_args,_player,_target,_display); diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf index 5c809de4a2..b36e53e820 100644 --- a/addons/disarming/functions/fnc_showItemsInListbox.sqf +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -28,7 +28,7 @@ private ["_classname", "_count", "_displayName", "_picture"]; _classname = _x; _count = (_itemsCountArray select 1) select _forEachIndex; - if (_classname != DUMMY_ITEM) then { //Don't show the dummy potato + if ((_classname != DUMMY_ITEM) && {_classname != "ACE_FakePrimaryWeapon"}) then { //Don't show the dummy potato or fake weapon switch (true) do { case (isClass (configFile >> "CfgWeapons" >> _classname)): { @@ -53,8 +53,8 @@ private ["_classname", "_count", "_displayName", "_picture"]; }; _listBoxCtrl lbAdd format ["%1", _displayName]; - _listBoxCtrl lbSetData [_forEachIndex, _classname]; - _listBoxCtrl lbSetPicture [_forEachIndex, _picture]; - _listBoxCtrl lbSetTextRight [_forEachIndex, str _count]; + _listBoxCtrl lbSetData [((lbSize _listBoxCtrl) - 1), _classname]; + _listBoxCtrl lbSetPicture [((lbSize _listBoxCtrl) - 1), _picture]; + _listBoxCtrl lbSetTextRight [((lbSize _listBoxCtrl) - 1), str _count]; }; } forEach (_itemsCountArray select 0); diff --git a/addons/disarming/script_component.hpp b/addons/disarming/script_component.hpp index d9bec366dc..9a1ef9156b 100644 --- a/addons/disarming/script_component.hpp +++ b/addons/disarming/script_component.hpp @@ -13,4 +13,3 @@ #define DISARM_CONTAINER "GroundWeaponHolder" #define DUMMY_ITEM "ACE_DebugPotato" -#define UNIQUE_MAGAZINES ["ACE_key_customKeyMagazine"] \ No newline at end of file diff --git a/addons/disarming/stringtable.xml b/addons/disarming/stringtable.xml index 583080ff08..e43624f96d 100644 --- a/addons/disarming/stringtable.xml +++ b/addons/disarming/stringtable.xml @@ -10,6 +10,8 @@ Открыть инвентарь Apri l'inventario Ouvrir l'inventaire + Felszerelés megtekintése + Abrir inventário \ No newline at end of file diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 7f57998157..2cbd8b0012 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -10,7 +10,8 @@ Lanzador utilizado Elhasznált kilövőcső Отстрелянная труба - Tubo utilizzato + Tubo usato + Tubo utilizado Used disposable rocket launcher @@ -21,18 +22,20 @@ Lanzador desechable utilizado Elhasznált eldobható rakétavető Отстрелянная одноразовая пусковая установка - Lanciarazzi monouso utilizzato + Lanciarazzi monouso già utilizzato + Lança foguetes descartável utilizado Preloaded Missile Dummy Vorgeladene Racketennachbildung - Missile préchargé Dummy + Missile préchargé Přednabitá dummy střela Wstępnie załadowana atrapa pocisku - Preloaded Missile Dummy + Precargado misil inerte Előtöltött műrakéta Предзаряженная ракетная болванка - Missile stupido precaricato + Missile inerte precaricato + Míssel inerte pré-carregado diff --git a/addons/dragging/CfgMovesBasic.hpp b/addons/dragging/CfgMovesBasic.hpp new file mode 100644 index 0000000000..de15271416 --- /dev/null +++ b/addons/dragging/CfgMovesBasic.hpp @@ -0,0 +1,8 @@ +class CfgMovesBasic { + class Actions { + class MoveWithInjuredManDragger; + class MoveWithInjuredManDraggerRfl: MoveWithInjuredManDragger { + Up = "amovpercmstpsraswrfldnon"; + }; + }; +}; diff --git a/addons/dragging/config.cpp b/addons/dragging/config.cpp index c58aab607e..cc843d4a68 100644 --- a/addons/dragging/config.cpp +++ b/addons/dragging/config.cpp @@ -14,3 +14,4 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" +#include "CfgMovesBasic.hpp" diff --git a/addons/dragging/functions/fnc_canCarry.sqf b/addons/dragging/functions/fnc_canCarry.sqf index 0fc5c074d6..6472124aef 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 "HitLegs") > 0.4})} +alive _target && {vehicle _target == _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 92744553fd..7eedfce179 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 "HitLegs") > 0.4})}; \ No newline at end of file +alive _target && {vehicle _target == _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 diff --git a/addons/dragging/functions/fnc_setCarryable.sqf b/addons/dragging/functions/fnc_setCarryable.sqf index bc6da1f04d..2a10ca4897 100644 --- a/addons/dragging/functions/fnc_setCarryable.sqf +++ b/addons/dragging/functions/fnc_setCarryable.sqf @@ -14,7 +14,8 @@ */ #include "script_component.hpp" -private ["_object", "_enableCarry", "_position", "_direction"]; +private ["_carryAction", "_dropAction", "_object", "_enableCarry", "_position", "_direction"]; +//IGNORE_PRIVATE_WARNING("_player", "_target"); _this resize 4; diff --git a/addons/dragging/functions/fnc_setDraggable.sqf b/addons/dragging/functions/fnc_setDraggable.sqf index da2d0310b4..5a42f4e439 100644 --- a/addons/dragging/functions/fnc_setDraggable.sqf +++ b/addons/dragging/functions/fnc_setDraggable.sqf @@ -14,7 +14,8 @@ */ #include "script_component.hpp" -private ["_object", "_enableDrag", "_position", "_direction"]; +private ["_dragAction", "_dropAction", "_object", "_enableDrag", "_position", "_direction"]; +//IGNORE_PRIVATE_WARNING("_player", "_target"); _this resize 4; diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 521ab87006..956f004635 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -7,7 +7,7 @@ Arrastrar Ciągnij Táhnout - Tracter + Trainer Ziehen Arrastar Trascina @@ -21,18 +21,18 @@ Položit Lâcher Loslassen - Largar + Soltar Lascia Elengedés Item too heavy Gegenstand ist zu schwer - Articulo demasiado pesado + Objeto demasiado pesado Przedmiot jest zbyt ciężki Objet trop lourd - Não é possível carregar o item devido a seu peso - Non è possibile trascinare l'oggetto a causa del suo peso + Objeto muito pesado + L'oggetto pesa troppo Предмет слишком тяжёлый Moc težké Az objektum túl nehéz @@ -45,8 +45,8 @@ Porter Nést Carregar - Trascina Felvevés + Trasporta Нести diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index a4a55f8609..998f73ccaf 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -37,7 +37,7 @@ player addEventHandler ["Killed", { } count _deadman; }]; player addEventHandler ["Take", { - private ["_item", "_getter", "_giver", "_config"]; + private ["_item", "_getter", "_giver", "_config", "_detonators"]; _item = _this select 2; _getter = _this select 0; _giver = _this select 1; diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf index 3be21df559..953476861b 100644 --- a/addons/explosives/functions/fnc_addCellphoneIED.sqf +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -17,7 +17,11 @@ * Public: No */ #include "script_component.hpp" + EXPLODE_4_PVT(_this,_unit,_explosive,_magazineClass,_extra); + +private["_config", "_detonators", "_hasRequired", "_requiredItems", "_code", "_count", "_codeSet"]; + // Config is the last item in the list of passed in items. _config = (_this select 3) select (count (_this select 3) - 1); @@ -29,7 +33,7 @@ _detonators = [_unit] call FUNC(getDetonators); _hasRequired = false; }; } count _requiredItems; -private ["_code", "_count", "_codeSet"]; + _codeSet = false; while {!_codeSet} do { _code = str(round (random 9999)); diff --git a/addons/explosives/functions/fnc_addClacker.sqf b/addons/explosives/functions/fnc_addClacker.sqf index 7e3529f931..b25c1e1bcd 100644 --- a/addons/explosives/functions/fnc_addClacker.sqf +++ b/addons/explosives/functions/fnc_addClacker.sqf @@ -17,7 +17,7 @@ * Public: Yes */ #include "script_component.hpp" -private ["_clacker", "_config", "_requiredItems", "_hasRequired"]; +private ["_clacker", "_config", "_requiredItems", "_hasRequired", "_detonators"]; EXPLODE_3_PVT(_this,_unit,_explosive,_magazineClass); // Config is the last item in the list of passed in items. _config = (_this select 3) select (count (_this select 3) - 1); diff --git a/addons/explosives/functions/fnc_addDetonateActions.sqf b/addons/explosives/functions/fnc_addDetonateActions.sqf index 5081040233..5c94649608 100644 --- a/addons/explosives/functions/fnc_addDetonateActions.sqf +++ b/addons/explosives/functions/fnc_addDetonateActions.sqf @@ -15,7 +15,7 @@ * Public: No */ #include "script_component.hpp" -private ["_result", "_item", "_children"]; +private ["_result", "_item", "_children", "_range", "_required"]; EXPLODE_2_PVT(_this,_unit,_detonator); _range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range"); diff --git a/addons/explosives/functions/fnc_addExplosiveActions.sqf b/addons/explosives/functions/fnc_addExplosiveActions.sqf index 29a2eed608..214b41602c 100644 --- a/addons/explosives/functions/fnc_addExplosiveActions.sqf +++ b/addons/explosives/functions/fnc_addExplosiveActions.sqf @@ -11,7 +11,7 @@ * Public: No */ #include "script_component.hpp" -private ["_mags", "_item", "_index", "_children"]; +private ["_mags", "_item", "_index", "_children", "_itemCount", "_list"]; EXPLODE_1_PVT(_this,_unit); diff --git a/addons/explosives/functions/fnc_addTransmitterActions.sqf b/addons/explosives/functions/fnc_addTransmitterActions.sqf index 6408eb2ec7..abaa57decc 100644 --- a/addons/explosives/functions/fnc_addTransmitterActions.sqf +++ b/addons/explosives/functions/fnc_addTransmitterActions.sqf @@ -14,7 +14,7 @@ * Public: No */ #include "script_component.hpp" -private ["_items", "_unit", "_children", "_config"]; +private ["_unit", "_children", "_config", "_detonators"]; _unit = _this select 0; _detonators = [_unit] call FUNC(getDetonators); _children = []; diff --git a/addons/explosives/functions/fnc_addTriggerActions.sqf b/addons/explosives/functions/fnc_addTriggerActions.sqf index e9c2dca0e6..6f4ece163c 100644 --- a/addons/explosives/functions/fnc_addTriggerActions.sqf +++ b/addons/explosives/functions/fnc_addTriggerActions.sqf @@ -15,8 +15,7 @@ * Public: No */ #include "script_component.hpp" -private ["_hasRequiredItems","_triggerTypes", "_children", - "_detonators", "_required", "_magTriggers"]; +private ["_hasRequiredItems","_triggerTypes", "_children", "_detonators", "_required", "_magTriggers"]; EXPLODE_2_PVT(_this,_magazine,_explosive); _detonators = [ACE_player] call FUNC(getDetonators); diff --git a/addons/explosives/functions/fnc_canDefuse.sqf b/addons/explosives/functions/fnc_canDefuse.sqf index cd04564a9f..ef4bd10a83 100644 --- a/addons/explosives/functions/fnc_canDefuse.sqf +++ b/addons/explosives/functions/fnc_canDefuse.sqf @@ -14,7 +14,7 @@ * Public: Yes */ #include "script_component.hpp" -private ["_specialist"]; +private ["_isSpecialist"]; EXPLODE_2_PVT(_this,_unit,_target); if (isNull(_target getVariable [QGVAR(Explosive),objNull])) exitWith { deleteVehicle _target; diff --git a/addons/explosives/functions/fnc_detonateExplosive.sqf b/addons/explosives/functions/fnc_detonateExplosive.sqf index f05a265c3a..917c874af6 100644 --- a/addons/explosives/functions/fnc_detonateExplosive.sqf +++ b/addons/explosives/functions/fnc_detonateExplosive.sqf @@ -19,18 +19,18 @@ * Public: Yes */ #include "script_component.hpp" -private ["_result", "_ignoreRange", "_helper"]; +private ["_result", "_ignoreRange", "_helpers", "_pos"]; EXPLODE_3_PVT(_this,_unit,_range,_item); _ignoreRange = (_range == -1); _result = true; if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {false}; -_helper = (attachedTo (_item select 0)); -if (!isNull(_helper)) then { - detach (_item select 0); - deleteVehicle _helper; -}; +_helpers = attachedObjects (_item select 0); +{ + detach _x; + deleteVehicle _x; +} forEach _helpers; if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhenDestroyed") == 0) then { private ["_exp", "_previousExp"]; @@ -46,10 +46,11 @@ if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhe }; }; [{ - _explosive = _this; - if (!isNull _explosive) then { - _explosive setDamage 1; - }; + private ["_explosive"]; + _explosive = _this; + if (!isNull _explosive) then { + _explosive setDamage 1; + }; }, _item select 0, _item select 1, 0] call EFUNC(common,waitAndExecute); _result diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index f00fa8a970..aa163b027f 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -15,7 +15,7 @@ * Public: Yes */ #include "script_component.hpp" -private ["_arr", "_ran", "_i","_speedDial"]; +private ["_arr", "_ran", "_i"]; EXPLODE_2_PVT(_this,_unit,_code); if (_unit getVariable [QGVAR(Dialing),false]) exitWith {}; if !(alive _unit) exitWith {}; diff --git a/addons/explosives/functions/fnc_getDetonators.sqf b/addons/explosives/functions/fnc_getDetonators.sqf index 26bde9b190..da0bdc93d2 100644 --- a/addons/explosives/functions/fnc_getDetonators.sqf +++ b/addons/explosives/functions/fnc_getDetonators.sqf @@ -14,6 +14,8 @@ * Public: Yes */ #include "script_component.hpp" +// IGNORE_PRIVATE_WARNING(_detonators); + private ["_unit", "_items", "_result", "_config"]; _unit = _this select 0; _items = (items _unit); @@ -21,7 +23,7 @@ _result = []; { _config = ConfigFile >> "CfgWeapons" >> _x; - if (getNumber (_config >> "ACE_Detonator") == 1) then { + if (getNumber (_config >> "ACE_Detonator") == 1 && {!(_x in _result)}) then { _result pushBack _x; }; } forEach _items; diff --git a/addons/explosives/functions/fnc_getPlacedExplosives.sqf b/addons/explosives/functions/fnc_getPlacedExplosives.sqf index 1164972047..0c2080923a 100644 --- a/addons/explosives/functions/fnc_getPlacedExplosives.sqf +++ b/addons/explosives/functions/fnc_getPlacedExplosives.sqf @@ -16,6 +16,8 @@ * Public: Yes */ #include "script_component.hpp" +// IGNORE_PRIVATE_WARNING(_allExplosives,_deadmanExplosives); + private ["_unit", "_clackerList", "_adjustedList", "_list", "_filter"]; _unit = _this select 0; _filter = nil; diff --git a/addons/explosives/functions/fnc_hasExplosives.sqf b/addons/explosives/functions/fnc_hasExplosives.sqf index 794cebc57d..bd790bd12f 100644 --- a/addons/explosives/functions/fnc_hasExplosives.sqf +++ b/addons/explosives/functions/fnc_hasExplosives.sqf @@ -14,6 +14,8 @@ * Public: Yes */ #include "script_component.hpp" +// IGNORE_PRIVATE_WARNING(_hasExplosives); + private ["_unit", "_result", "_magazines"]; _result = false; _unit = _this select 0; diff --git a/addons/explosives/functions/fnc_hasPlacedExplosives.sqf b/addons/explosives/functions/fnc_hasPlacedExplosives.sqf index 4a6ccc9de8..174bc07fbc 100644 --- a/addons/explosives/functions/fnc_hasPlacedExplosives.sqf +++ b/addons/explosives/functions/fnc_hasPlacedExplosives.sqf @@ -14,4 +14,6 @@ * Public: Yes */ #include "script_component.hpp" +// IGNORE_PRIVATE_WARNING(_hasPlacedExplosives); + (count (_this call FUNC(getPlacedExplosives)) > 0) diff --git a/addons/explosives/functions/fnc_module.sqf b/addons/explosives/functions/fnc_module.sqf index 3e522e9a70..4080b41bde 100644 --- a/addons/explosives/functions/fnc_module.sqf +++ b/addons/explosives/functions/fnc_module.sqf @@ -15,6 +15,9 @@ */ #include "script_component.hpp" if !(isServer) exitWith {}; + +private["_activated", "_logic"]; + _logic = _this select 0; _activated = _this select 2; diff --git a/addons/explosives/functions/fnc_onLanded.sqf b/addons/explosives/functions/fnc_onLanded.sqf index 59487e651c..f2ed729b1a 100644 --- a/addons/explosives/functions/fnc_onLanded.sqf +++ b/addons/explosives/functions/fnc_onLanded.sqf @@ -1,7 +1,10 @@ /* * Author: Garth 'L-H' de Wet + * Handles the "EpeContactStart" event when placing the explosive. * * Arguments: + * 0: Explosive Placing Object + * 1: Colliding Object * * Return Value: * None @@ -14,19 +17,23 @@ #include "script_component.hpp" EXPLODE_2_PVT(_this,_explosive,_hitTarget); +TRACE_2("Explosive EpeContactStart",_explosive,_hitTarget); + if ((_explosive getVariable [QGVAR(Handled), false])) exitWith {}; _explosive setVariable [QGVAR(Handled), true]; if (!isNull _hitTarget && {_hitTarget isKindOf "AllVehicles"}) then { + TRACE_1("Attaching to",_hitTarget); _explosive attachTo [_hitTarget]; private "_dir"; - _dir = _setup getVariable [QGVAR(Direction), 0]; + _dir = _explosive getVariable [QGVAR(Direction), 0]; _dir = _dir - (getDir _hitTarget); [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); } else { [{ EXPLODE_2_PVT(_this,_player,_explosive); private "_pos"; + _pos = getPosASL _explosive; if (surfaceIsWater _pos) then { _pos = getPosASL _explosive; _explosive setPosASL _pos; diff --git a/addons/explosives/functions/fnc_placeExplosive.sqf b/addons/explosives/functions/fnc_placeExplosive.sqf index 228e8eef23..4bed019d47 100644 --- a/addons/explosives/functions/fnc_placeExplosive.sqf +++ b/addons/explosives/functions/fnc_placeExplosive.sqf @@ -21,10 +21,14 @@ * Public: Yes */ #include "script_component.hpp" -private ["_ammo", "_explosive"]; +private ["_ammo", "_explosive", "_attachedTo", "_expPos", "_magazineTrigger"]; EXPLODE_6_PVT(_this,_unit,_pos,_dir,_magazineClass,_triggerConfig,_triggerSpecificVars); -if (count _this > 6) then { - deleteVehicle (_this select 6); +DEFAULT_PARAM(6,_setupPlaceholderObject,objNull); + +_attachedTo = objNull; +if (!isNull _setupPlaceholderObject) then { + _attachedTo = attachedTo _setupPlaceholderObject; + deleteVehicle _setupPlaceholderObject; }; if (isNil "_triggerConfig") exitWith { @@ -57,6 +61,11 @@ _expPos = getPosATL _explosive; _defuseHelper setPosATL (((getPosATL _defuseHelper) vectorAdd (_pos vectorDiff _expPos))); _explosive setPosATL _pos; +if (!isNull _attachedTo) then { + TRACE_1("Attaching Live Explosive",_attachedTo); + _explosive attachTo [_attachedTo]; +}; + if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars] call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive}; [[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index 0082a9bd6a..f133dbb080 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -19,7 +19,7 @@ if (GVAR(pfeh_running)) then { [QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); GVAR(pfeh_running) = false; }; -private ["_mag", "_setup", "_player"]; +private ["_setup", "_player", "_dir"]; _setup = GVAR(Setup); GVAR(Setup) = objNull; [GVAR(placer), "ACE_Explosives", false] call EFUNC(Common,setForceWalkStatus); diff --git a/addons/explosives/functions/fnc_setupExplosive.sqf b/addons/explosives/functions/fnc_setupExplosive.sqf index ea3a086274..a0aad3d1ab 100644 --- a/addons/explosives/functions/fnc_setupExplosive.sqf +++ b/addons/explosives/functions/fnc_setupExplosive.sqf @@ -28,7 +28,7 @@ GVAR(Setup) setVariable [QGVAR(class), _class, true]; GVAR(TweakedAngle) = 180; [QGVAR(Placement),"OnEachFrame", { - private "_player"; + private ["_player", "_pos"]; _player = ACE_player; if (GVAR(placer) != _player) exitWith { call FUNC(place_Cancel); diff --git a/addons/explosives/functions/fnc_startDefuse.sqf b/addons/explosives/functions/fnc_startDefuse.sqf index 7eacdd33e1..11ca95f894 100644 --- a/addons/explosives/functions/fnc_startDefuse.sqf +++ b/addons/explosives/functions/fnc_startDefuse.sqf @@ -16,11 +16,14 @@ */ #include "script_component.hpp" EXPLODE_2_PVT(_this,_unit,_target); + +private["_actionToPlay", "_defuseTime", "_isEOD"]; + _target = attachedTo (_target); _fnc_DefuseTime = { EXPLODE_2_PVT(_this,_specialist,_target); - + private ["_defuseTime"]; _defuseTime = 5; if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then { _defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime"); @@ -40,23 +43,22 @@ if (ACE_player != _unit) then { if (isPlayer _unit) then { [[_unit, _target], QFUNC(startDefuse), _unit] call EFUNC(common,execRemoteFnc); } else { - // TODO: use scheduled delay execution - [_unit, _target, [[_unit] call EFUNC(Common,isEOD), _target] call _fnc_DefuseTime] spawn { - (_this select 0) playActionNow _actionToPlay; - (_this select 0) disableAI "MOVE"; - (_this select 0) disableAI "TARGET"; - sleep (_this select 2); - [(_this select 0), (_this select 1)] call FUNC(defuseExplosive); - (_this select 0) enableAI "MOVE"; - (_this select 0) enableAI "TARGET"; - }; + _unit playActionNow _actionToPlay; + _unit disableAI "MOVE"; + _unit disableAI "TARGET"; + _defuseTime = [[_unit] call EFUNC(Common,isEOD), _target] call _fnc_DefuseTime; + [{ + PARAMS_2(_unit,_target); + [_unit, _target] call FUNC(defuseExplosive); + _unit enableAI "MOVE"; + _unit enableAI "TARGET"; + }, [_unit, _target], _defuseTime, 0] call EFUNC(common,waitAndExecute); }; } else { _unit playActionNow _actionToPlay; - private ["_defuseSeconds", "_isEOD"]; _isEOD = [_unit] call EFUNC(Common,isEOD); - _defuseSeconds = [_isEOD, _target] call _fnc_DefuseTime; + _defuseTime = [_isEOD, _target] call _fnc_DefuseTime; if (_isEOD || {!GVAR(RequireSpecialist)}) then { - [_defuseSeconds, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize "STR_ACE_Explosives_DefusingExplosive")] call EFUNC(common,progressBar); + [_defuseTime, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize "STR_ACE_Explosives_DefusingExplosive")] call EFUNC(common,progressBar); }; }; diff --git a/addons/explosives/functions/fnc_startTimer.sqf b/addons/explosives/functions/fnc_startTimer.sqf index 13da62ec29..9d2ca0aee4 100644 --- a/addons/explosives/functions/fnc_startTimer.sqf +++ b/addons/explosives/functions/fnc_startTimer.sqf @@ -19,6 +19,7 @@ EXPLODE_2_PVT(_this,_explosive,_delay); [{ + private ["_explosive"]; _explosive = _this; if (!isNull _explosive) then { [_explosive, -1, [_explosive, 0]] call FUNC(detonateExplosive); diff --git a/addons/explosives/functions/fnc_triggerType.sqf b/addons/explosives/functions/fnc_triggerType.sqf index fc6a0b90c1..f9d8790a56 100644 --- a/addons/explosives/functions/fnc_triggerType.sqf +++ b/addons/explosives/functions/fnc_triggerType.sqf @@ -14,7 +14,10 @@ * Public: Yes */ #include "script_component.hpp" -private "_result"; + +private["_result", "_config", "_count", "_index", "_supports"]; +// IGNORE_PRIVATE_WARNING(_supports); + _result = []; _config = getArray (ConfigFile >> "CfgMagazines" >> (_this select 0) >> "ACE_Triggers" >> "SupportedTriggers"); _count = count _config; diff --git a/addons/explosives/script_component.hpp b/addons/explosives/script_component.hpp index 60c7e88d06..5ff12b8ba3 100644 --- a/addons/explosives/script_component.hpp +++ b/addons/explosives/script_component.hpp @@ -1,6 +1,8 @@ #define COMPONENT explosives #include "\z\ace\addons\main\script_mod.hpp" +// #define DEBUG_MODE_FULL + #ifdef DEBUG_ENABLED_EXPLOSIVES #define DEBUG_MODE_FULL #endif diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 8e941b1f2a..9d885c236c 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -42,7 +42,7 @@ Sprengstoffcode: %1 Código del explosivo: %1 Kod ładunku: %1 - Code explosif: %1 + Code de l'explosif: %1 Kód výbušniny: %1 Robbanóanyag kódja: %1 Código do explosivo: %1 @@ -138,7 +138,7 @@ M57 Zündvorrichtung Dispositivo de detonación M57 Zapalnik M57 - M57 Dispositif de mise à feu + Dispositif de mise à feu M57 Odpalovací zařízení M57 Detonatore M57 M57 Gyújtóeszköz @@ -162,7 +162,7 @@ M26 Zündvorrichtung Dispositivo de detonación MK26 Zapalnik M26 - M26 Dispositif de mise à feu + Dispositif de mise à feu M26 Odpalovací zařízení M26 Detonatore M26 M26 Gyújtóeszköz @@ -208,7 +208,7 @@ Add to Speed Dial Zur Schnellauswahl hinzufügen - Agregar a marcado rápido + Añadir a marcado rápido Dodaj do szybkiego wybierania Ajouter à la composition rapide Přidat jako rychlou volbu @@ -222,7 +222,7 @@ Löschen Borrar Usuń - Désamorçé + Effacer Čistý Libera Törlés @@ -282,7 +282,7 @@ "Zünden"-Menü Menú de detonación Menu detonacji - Menu de mise à feu + Menu de mise à feux Menu Detonace Menù di detonazione Robbantási menü @@ -294,7 +294,7 @@ "Platzieren"-Menü Menú de colocación Menu umieszczania - Menu placement + Menu de placement Menu Umístění Menù di collocamento Elhelyezési menü @@ -364,11 +364,11 @@ Select a Trigger Wähle einen Zünder - Seleccionar un disparador + Seleccionar un detonador Wybierz zapalnik Sélectionner une mise à feu Zvolit Detonátor - Seleziona un Attivatore + Seleziona un attivatore Gyújtóeszköz kiválasztása Selecionar um Gatilho Выберите детонатор @@ -392,7 +392,7 @@ Druckplatte Plaque de pression Nášlapná nástraha - Piastra a Pressione + Piastra a pressione Nyomólap Placa de pressão Нажимная плита @@ -404,7 +404,7 @@ Stolperdraht Fil de détente Nástražný drát - Filo a Inciampo + Filo a inciampo Botlódrót Linha de tração Растяжка @@ -440,7 +440,7 @@ Infrarotsensor (Seitenangriff) Capteur IR (de flanc) IR Značkovač (Výbuch stranou) - Sensore IR (Attacco laterale) + Sensore IR (attacco laterale) Infravörös szenzor (Side Attack) Sensor infravermelho (ataque lateral) ИК сенсор (детонация вбок) @@ -452,7 +452,7 @@ Magnetfeldsensor (Bodenangriff) Capteur magnétique (par le bas) Magnetický Senzor (Výbuch ze spoda) - Sensore Magnetico di Prossimità (Attacco inferiore) + Sensore Magnetico di Prossimità (attacco inferiore) Mágneses mező érzékelő (Bottom Attack) Influência magnética (ataque inferior) Магнитный сенсор (детонация вверх) @@ -462,7 +462,7 @@ Keine Sprengladungen auf diesem Auslöser. Ningún explosivo en el detonador. Pas d'explosif à mettre à feu. - Nessun esplosivo sul sensore. + Nessun esplosivo Žádná výbušnina k odpálení. Nincs robbanóanyag a gyújtóeszközhöz kötve. Brak ładunków na zapalnik. @@ -477,7 +477,9 @@ Czuwak Detonador de hombre muerto Dead Man's Switch + Detonador do homem morto Кнопка мертвеца + Detonatore a rilascio Used to remotely trigger explosives when released. @@ -486,9 +488,10 @@ Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny Używany w celu zdalnej detonacji ładunków, kiedy jego operator zostanie zabity. Utilizado para detonar explosivos remotamente al soltarlo. - Robbanóanyagok távoli robbantásához való, elengedéskor gyújt. + Robbanóanyagok távoli robbantásához + Usado para detonar remotamente o explosivo quando solto. Используется для дистанционного подрыва, после смерти оператора. - Usato per attivare esplosivi quando rilasciato + Usato per attivare a distanza esplosivi al momento del rilascio Pick up @@ -500,6 +503,7 @@ Felszedés Поднять Raccogli + Pegar diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index 698a9bef22..31fe38335d 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -12,7 +12,7 @@ #include "script_component.hpp" -private ["_vehicle", "_weapon", "_ammo", "_magazine", "_projectile","_velocityCorrection"]; +private ["_vehicle", "_weapon", "_ammo", "_magazine", "_projectile", "_sumVelocity"]; _vehicle = _this select 0; _weapon = _this select 1; @@ -43,12 +43,8 @@ _offset = 0; }; } forEach _FCSMagazines; -// Correct velocity for weapons that have initVelocity -// @todo: Take into account negative initVelocities -_velocityCorrection = (vectorMagnitude velocity _projectile) - - getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); -[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, -_velocityCorrection] call EFUNC(common,changeProjectileDirection); +[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, 0] call EFUNC(common,changeProjectileDirection); // Remove the platform velocity if( (vectorMagnitude velocity _vehicle) > 2) then { diff --git a/addons/fcs/functions/fnc_keyUp.sqf b/addons/fcs/functions/fnc_keyUp.sqf index 433053178b..a7bf8defe5 100644 --- a/addons/fcs/functions/fnc_keyUp.sqf +++ b/addons/fcs/functions/fnc_keyUp.sqf @@ -12,7 +12,7 @@ #include "script_component.hpp" -private ["_vehicle", "_turret", "_turretConfig", "_distance", "_magazines", "_showHint", "_playSound"]; +private ["_vehicle", "_turret", "_turretConfig", "_distance", "_weapons", "_magazines", "_showHint", "_playSound"]; _vehicle = _this select 0; _turret = _this select 1; @@ -21,6 +21,7 @@ _turretConfig = [configFile >> "CfgVehicles" >> typeOf _vehicle, _turret] call E _distance = call FUNC(getRange); +_weapons = _vehicle weaponsTurret _turret; _magazines = _vehicle magazinesTurret _turret; if (_distance == 0) then { @@ -31,9 +32,9 @@ if (_distance == 0) then { ] call EFUNC(common,getTargetDistance); // maximum distance: 5000m, 5m precision }; -private ["_weaponDirection", "_angleTarget"]; - -_weaponDirection = _vehicle weaponDirection (_vehicle currentWeaponTurret _turret); // @todo doesn't work for sub turrets +private ["_weapon", "_weaponDirection", "_angleTarget"]; +_weapon = _vehicle currentWeaponTurret _turret; +_weaponDirection = _vehicle weaponDirection _weapon; // @todo doesn't work for sub turrets if (_turret isEqualTo ([_vehicle] call EFUNC(common,getTurretCommander))) then { _weaponDirection = eyeDirection _vehicle; @@ -55,7 +56,7 @@ if (!(isNil QGVAR(backgroundCalculation)) and {!(scriptDone GVAR(backgroundCalcu terminate GVAR(backgroundCalculation); }; -private "_movingAzimuth"; +private ["_movingAzimuth", "_posTarget", "_velocityTarget"]; // MOVING TARGETS _movingAzimuth = 0; @@ -72,7 +73,7 @@ if (time - GVAR(time) > 1 and GVAR(time) != -1 and count _this < 3) then { ((_posTarget select 2) - (GVAR(position) select 2)) / (time - GVAR(time)) ]; - private ["_magazineType", "_ammoType", "_initSpeed", "_airFriction", "_timeToLive", "_simulationStep"]; + private ["_magazineType", "_ammoType", "_initSpeed", "_airFriction", "_timeToLive", "_simulationStep", "_initSpeedCoef", "_velocityMagnitude"]; // estimate time to target _magazineType = _vehicle currentMagazineTurret _turret; @@ -82,6 +83,14 @@ if (time - GVAR(time) > 1 and GVAR(time) != -1 and count _this < 3) then { _timeToLive = getNumber (configFile >> "CfgAmmo" >> _ammoType >> "timeToLive"); _simulationStep = getNumber (configFile >> "CfgAmmo" >> _ammoType >> "simulationStep"); + _initSpeedCoef = getNumber(configFile >> "CfgWeapons" >> _weapon >> "initSpeed"); + if (_initSpeedCoef < 0) then { + _initSpeed = _initSpeed * -_initSpeedCoef; + }; + if (_initSpeedCoef > 0) then { + _initSpeed = _initSpeedCoef; + }; + if (_simulationStep != 0) then { private ["_posX", "_velocityX", "_velocityY", "_timeToTarget"]; @@ -138,21 +147,43 @@ _FCSMagazines = []; _FCSElevation = []; { - private "_ammoType"; - - _ammoType = getText (configFile >> "CfgMagazines" >> _x >> "ammo"); + private ["_magazine", "_ammoType"]; + _magazine = _x; + _ammoType = getText (configFile >> "CfgMagazines" >> _magazine >> "ammo"); if !(getText (configFile >> "CfgAmmo" >> _ammoType >> "simulation") == "shotMissile") then { private ["_maxElev", "_initSpeed", "_airFriction", "_offset"]; _maxElev = getNumber (_turretConfig >> "maxElev"); - _initSpeed = getNumber (configFile >> "CfgMagazines" >> _x >> "initSpeed"); + _initSpeed = getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); _airFriction = getNumber (configFile >> "CfgAmmo" >> _ammoType >> "airFriction"); - + + { + private ["_weapon", "_muzzles", "_weaponMagazines", "_muzzleMagazines"]; + _weapon = _x; + _muzzles = getArray (configFile >> "CfgWeapons" >> _weapon >> "muzzles"); + _weaponMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines"); + { + if (_x != "this") then { + _muzzleMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines"); + _weaponMagazines append _muzzleMagazines; + }; + } forEach _muzzles; + if (_magazine in _weaponMagazines) exitWith { + _initSpeedCoef = getNumber(configFile >> "CfgWeapons" >> _weapon >> "initSpeed"); + if (_initSpeedCoef < 0) then { + _initSpeed = _initSpeed * -_initSpeedCoef; + }; + if (_initSpeedCoef > 0) then { + _initSpeed = _initSpeedCoef; + }; + }; + } forEach _weapons; + _offset = "ace_fcs" callExtension format ["%1,%2,%3,%4", _initSpeed, _airFriction, _angleTarget, _distance]; _offset = parseNumber _offset; - _FCSMagazines = _FCSMagazines + [_x]; + _FCSMagazines = _FCSMagazines + [_magazine]; _FCSElevation = _FCSElevation + [_offset]; }; } forEach _magazines; diff --git a/addons/fcs/initKeybinds.sqf b/addons/fcs/initKeybinds.sqf index 8e79bc8056..96482ddd1c 100644 --- a/addons/fcs/initKeybinds.sqf +++ b/addons/fcs/initKeybinds.sqf @@ -1,6 +1,6 @@ // by commy2 -["ACE3", QGVAR(lazeTarget), localize "STR_ACE_FCS_LaseTarget", +["ACE3 Vehicles", QGVAR(lazeTarget), localize "STR_ACE_FCS_LaseTarget", { // Conditions: canInteract if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -30,7 +30,7 @@ }, [15, [false, false, false]], false] call cba_fnc_addKeybind; //Tab Key -["ACE3", QGVAR(adjustRangeUp), localize "STR_ACE_FCS_AdjustRangeUp", +["ACE3 Vehicles", QGVAR(adjustRangeUp), localize "STR_ACE_FCS_AdjustRangeUp", { // Conditions: canInteract if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -44,7 +44,7 @@ {false}, [201, [false, false, false]], false] call cba_fnc_addKeybind; //PageUp Key -["ACE3", QGVAR(adjustRangDown), localize "STR_ACE_FCS_AdjustRangeDown", +["ACE3 Vehicles", QGVAR(adjustRangDown), localize "STR_ACE_FCS_AdjustRangeDown", { // Conditions: canInteract if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 857f511fca..d62a5d85ea 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -10,11 +10,13 @@ Iluminar objetivo / Medir distancia Подсветить цель / Замерить расстояние Célpont lézerezése / Távolság Bemérése + Misura la distanza + Marcar com laser / Medir Distância Zeroed To Haltepunkt - Fijado a + Ajustado a Wyzerowany na Nastaveno na Zéroté à diff --git a/addons/flashsuppressors/stringtable.xml b/addons/flashsuppressors/stringtable.xml index e312f2d5c1..509c16ddce 100644 --- a/addons/flashsuppressors/stringtable.xml +++ b/addons/flashsuppressors/stringtable.xml @@ -11,7 +11,7 @@ Tlumič plamene (6,5 mm) Cache-flamme (6,5 mm) Пламегаситель (6,5 мм) - Supresor (6,5 mm) + Bocacha (6,5 mm) Flash Suppressor (7.62 mm) @@ -23,7 +23,7 @@ Tlumič plamene (7,62 mm) Cache-flamme (7,62 mm) Пламегаситель (7,62 мм) - Supresor (7,62 mm) + Bocacha (7,62 mm) Flash Suppressor (5.56 mm) @@ -35,7 +35,7 @@ Tlumič plamene (5,56 mm) Cache-flamme (5,56 mm) Пламегаситель (5,56 мм) - Supresor (5,56 mm) + Bocacha (5,56 mm) Flash Suppressor (.45 ACP) @@ -47,7 +47,7 @@ Tlumič plamene (.45 ACP) Cache-flamme (.45 ACP) Пламегаситель (.45 ACP) - Supresor (.45 ACP) + Bocacha (.45 ACP) Flash Suppressor (9 mm) @@ -59,7 +59,7 @@ Tlumič plamene (9 mm) Cache-flamme (9 mm) Пламегаситель (9 мм) - Supresor (9 mm) + Bocacha (9 mm) Flash Suppressor (.338) @@ -68,10 +68,10 @@ Soppressore di fiamma (.338) Supressor de Clarão (.338) Tłumik płomienia (.338) - Tlumič záblesku (.338) + Tlumič plamene (.338) Cache-flamme (.338) Пламегаситель (.338) - Supresor (.338) + Bocacha (.338) Flash Suppressor (9.3 mm) @@ -80,10 +80,10 @@ Soppressore di fiamma (9.3mm) Supressor de Clarão (9,3mm) Tłumik płomienia (9,3 mm) - Tlumič záblesku (9,3 mm) + Tlumič plamene (9,3 mm) Cache-flamme (9,3 mm) Пламегаситель (9,3 мм) - Supresor (9,3 mm) + Bocacha (9,3 mm) \ No newline at end of file diff --git a/addons/frag/ACE_Settings.hpp b/addons/frag/ACE_Settings.hpp new file mode 100644 index 0000000000..b160a127f3 --- /dev/null +++ b/addons/frag/ACE_Settings.hpp @@ -0,0 +1,8 @@ +class ACE_Settings { + class GVAR(enabled) { + displayName = "Frag System"; + description = "Enables the shrapnel system for explosives"; + typeName = "BOOL"; + value = 1; + }; +}; diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 3cfb27dfaf..19414965b2 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -9,7 +9,9 @@ class CfgAmmo { // GVAR(skip) = 1; //}; class Bo_GBU12_LGB; - class Nou_GBU12 : Bo_GBU12_LGB { + class ACE_GBU12 : Bo_GBU12_LGB { + GVAR(enabled) = 1; + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; GVAR(metal) = 140000; GVAR(charge) = 87000; @@ -23,6 +25,8 @@ class CfgAmmo { class GrenadeBase; class Grenade; class GrenadeHand: Grenade { + GVAR(enabled) = 1; + GVAR(skip) = 0; GVAR(force) = 1; // This is a good high-drag frag type for grenades. @@ -44,10 +48,16 @@ class CfgAmmo { }; class RocketBase; - //class R_Hydra_HE: RocketBase { - // GVAR(skip) = 1; - //}; - + class R_Hydra_HE: RocketBase { + // Source: http://fas.org/man/dod-101/sys/missile/hydra-70.htm + GVAR(enabled) = 1; + + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + GVAR(metal) = 3850; + GVAR(charge) = 1040; + GVAR(gurney_c) = 2700; + GVAR(gurney_k) = 1/2; + }; //class R_57mm_HE: RocketBase { // GVAR(skip) = 1; //}; @@ -62,32 +72,39 @@ class CfgAmmo { class BombCore; class Bo_Mk82: BombCore { + GVAR(enabled) = 1; + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; GVAR(metal) = 140000; GVAR(charge) = 87000; GVAR(gurney_c) = 2320; GVAR(gurney_k) = 1/2; }; - - + class G_40mm_HE: GrenadeBase { - GVAR(skip) = 0; - GVAR(force) = 1; - }; - - class ACE_G_40mm_HEDP: G_40mm_HE { - GVAR(classes)[] = {"ACE_frag_tiny_HD"}; - GVAR(metal) = 200; - GVAR(charge) = 45; - GVAR(gurney_c) = 2830; - GVAR(gurney_k) = 3/5; - }; - class ACE_G_40mm_HE: ACE_G_40mm_HEDP { + // Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M441 + GVAR(enabled) = 1; + GVAR(classes)[] = {"ACE_frag_tiny_HD"}; GVAR(metal) = 200; GVAR(charge) = 32; GVAR(gurney_c) = 2700; - GVAR(gurney_k) = 3/5; + GVAR(gurney_k) = 1/2; + }; + class G_40mm_HEDP: G_40mm_HE { + // Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M433 + GVAR(enabled) = 1; + + GVAR(classes)[] = {"ACE_frag_tiny_HD"}; + GVAR(metal) = 200; + GVAR(charge) = 45; + GVAR(gurney_c) = 2830; + GVAR(gurney_k) = 1/2; + }; + + class ACE_G_40mm_HEDP: G_40mm_HEDP { + }; + class ACE_G_40mm_HE: G_40mm_HE { }; class ACE_G_40mm_Practice: ACE_G_40mm_HE { GVAR(skip) = 1; @@ -98,17 +115,67 @@ class CfgAmmo { }; // curator ammo entries - class Sh_82mm_AMOS; + class ShellBase; + class Sh_125mm_HEAT; + class Sh_155mm_AMOS: ShellBase { + // Source: http://www.globalsecurity.org/military/systems/munitions/m795.htm + GVAR(enabled) = 1; + + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + GVAR(metal) = 36000; + GVAR(charge) = 9979; + GVAR(gurney_c) = 2440; + GVAR(gurney_k) = 1/2; + }; + class Sh_82mm_AMOS : Sh_155mm_AMOS { + // Source: http://www.arsenal-bg.com/defense_police/mortar_bombs_82mm.htm + GVAR(enabled) = 1; + + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + GVAR(metal) = 3200; + GVAR(charge) = 420; + GVAR(gurney_c) = 2440; + GVAR(gurney_k) = 1/2; + }; class ModuleOrdnanceMortar_F_Ammo: Sh_82mm_AMOS { + GVAR(enabled) = 1; + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; GVAR(metal) = 800; GVAR(charge) = 4200; GVAR(gurney_c) = 2320; GVAR(gurney_k) = 1/2; }; - - class Sh_155mm_AMOS; + class Sh_105mm_HEAT_MP : Sh_125mm_HEAT { + GVAR(enabled) = 1; + + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + GVAR(metal) = 11400; + GVAR(charge) = 7100; + GVAR(gurney_c) = 2800; + GVAR(gurney_k) = 1/2; + }; + class Sh_120mm_HE : ShellBase { + GVAR(enabled) = 1; + + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + GVAR(metal) = 23000; + GVAR(charge) = 3148; + GVAR(gurney_c) = 2830; + GVAR(gurney_k) = 1/2; + }; + class Sh_125mm_HE: Sh_120mm_HE { + GVAR(enabled) = 1; + + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + GVAR(metal) = 16000; + GVAR(charge) = 3200; + GVAR(gurney_c) = 2440; + GVAR(gurney_k) = 1/2; + }; class ModuleOrdnanceHowitzer_F_ammo: Sh_155mm_AMOS { + GVAR(enabled) = 1; + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; GVAR(metal) = 1950; GVAR(charge) = 15800; @@ -131,11 +198,27 @@ class CfgAmmo { // GVAR(multiplier) = 1.2; //}; - //class MissileBase; - //class M_Hellfire_AT: MissileBase { - // GVAR(force) = 1; - // GVAR(multiplier) = 1.75; - //}; + class MissileBase; + class Missile_AGM_02_F : MissileBase { + // Source: http://fas.org/man/dod-101/sys/smart/agm-65.htm + GVAR(enabled) = 1; + + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + GVAR(metal) = 56250; + GVAR(charge) = 39000; + GVAR(gurney_c) = 2700; + GVAR(gurney_k) = 1/2; + }; + class M_Hellfire_AT: MissileBase { + // Source: http://www.designation-systems.net/dusrm/m-114.html + GVAR(enabled) = 1; + + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + GVAR(metal) = 8000; + GVAR(charge) = 2400; + GVAR(gurney_c) = 2700; + GVAR(gurney_k) = 1/2; + }; /* class B_762x51_Ball; diff --git a/addons/frag/CfgEventhandlers.hpp b/addons/frag/CfgEventhandlers.hpp index 1e631e07eb..df7eaeacd1 100644 --- a/addons/frag/CfgEventhandlers.hpp +++ b/addons/frag/CfgEventhandlers.hpp @@ -1,12 +1,12 @@ class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/frag/CfgVehicles.hpp b/addons/frag/CfgVehicles.hpp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/addons/frag/XEH_postInit.sqf b/addons/frag/XEH_postInit.sqf new file mode 100644 index 0000000000..6c8d64d1fb --- /dev/null +++ b/addons/frag/XEH_postInit.sqf @@ -0,0 +1,5 @@ +#include "script_component.hpp" + +if(isServer) then { + [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; +}; \ No newline at end of file diff --git a/addons/frag/XEH_post_init.sqf b/addons/frag/XEH_post_init.sqf deleted file mode 100644 index 9769148871..0000000000 --- a/addons/frag/XEH_post_init.sqf +++ /dev/null @@ -1,18 +0,0 @@ -#include "script_component.hpp" -if(isServer) then { - [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; -}; -/* -GVAR(replacedBisArtyWrapper) = false; -[] spawn { - waitUntil { - if(!(isNil "BIS_ARTY_F_ShellFlight")) then { - ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight; - BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER); - GVAR(replacedBisArtyWrapper) = true; - }; - sleep 4; - GVAR(replacedBisArtyWrapper) - }; -}; -*/ \ No newline at end of file diff --git a/addons/frag/XEH_pre_Init.sqf b/addons/frag/XEH_preInit.sqf similarity index 69% rename from addons/frag/XEH_pre_Init.sqf rename to addons/frag/XEH_preInit.sqf index 5fb261cc05..906a696ebf 100644 --- a/addons/frag/XEH_pre_Init.sqf +++ b/addons/frag/XEH_preInit.sqf @@ -1,48 +1,35 @@ #include "script_component.hpp" - ADDON = false; +PREP(doSpall); PREP(fired); PREP(frago); -PREP(trackFragRound); PREP(spallTrack); -PREP(doSpall); -PREP(vectorDiffFast); +PREP(trackFragRound); -GVAR(trackedObjects) = []; GVAR(blackList) = []; GVAR(traceFrags) = false; - -GVAR(replacedBisArtyWrapper) = true; +GVAR(trackedObjects) = []; GVAR(TOTALFRAGS) = 0; -GVAR(spallIsTrackingCount) = 0; GVAR(spallHPData) = []; +GVAR(spallIsTrackingCount) = 0; +GVAR(autoTrace) = true; +GVAR(traceID) = -1; GVAR(traces) = []; GVAR(tracesStarted) = false; -GVAR(traceID) = -1; -GVAR(autoTrace) = true; - -// TODO setting -GVAR(enabled) = true; - // * Other Shit */ -PREP(frag_trace); -PREP(denyFrag); -PREP(BIS_ARTY_WRAPPER); -PREP(startTracing); -PREP(stopTracing); -PREP(clearTraces); -PREP(trackTrace); +PREP(addBlackList); PREP(addTrack); PREP(drawTraces); PREP(removeTrack); PREP(spallHP); -PREP(addBlackList); -PREP(addManualTrack); +PREP(startTracing); +PREP(stopTracing); +PREP(trackTrace); ADDON = true; diff --git a/addons/frag/config.cpp b/addons/frag/config.cpp index 4c1fb71e15..16af88bfc4 100644 --- a/addons/frag/config.cpp +++ b/addons/frag/config.cpp @@ -10,7 +10,6 @@ class CfgPatches { }; }; -//PRELOAD_ADDONS; - #include "CfgEventhandlers.hpp" #include "CfgAmmo.hpp" +#include "ACE_Settings.hpp" \ No newline at end of file diff --git a/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf b/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf deleted file mode 100644 index 0d71cf58ac..0000000000 --- a/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "script_component.hpp" -_ret = [(_this select 6)] call FUNC(removeTrack); -if(!_ret) then { - [(_this select 6)] call FUNC(addBlackList); -}; -_this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight; -_catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1); -_shell = _catEntry select 0; -_ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact"); -if(_ARTY_DeployOnImpact == "") then { - _this set[6, _shell]; - _this call FUNC(fired); -}; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addBlackList.sqf b/addons/frag/functions/fnc_addBlackList.sqf index f7b3faf902..95edcd1590 100644 --- a/addons/frag/functions/fnc_addBlackList.sqf +++ b/addons/frag/functions/fnc_addBlackList.sqf @@ -1,4 +1,4 @@ -#include "script_component.hpp" -private ["_round"]; -_round = _this select 0; +#include "script_component.hpp" +private ["_round"]; +_round = _this select 0; GVAR(blackList) set[(count GVAR(blackList)), _round]; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addManualTrack.sqf b/addons/frag/functions/fnc_addManualTrack.sqf deleted file mode 100644 index 3dc14cc748..0000000000 --- a/addons/frag/functions/fnc_addManualTrack.sqf +++ /dev/null @@ -1,7 +0,0 @@ -#include "script_component.hpp" -private ["_round"]; -_round = _this select 0; -if(alive _round) then { - GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round]; - [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler; -}; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addTrack.sqf b/addons/frag/functions/fnc_addTrack.sqf index 2beea1dd56..d4a4272a9c 100644 --- a/addons/frag/functions/fnc_addTrack.sqf +++ b/addons/frag/functions/fnc_addTrack.sqf @@ -1,5 +1,8 @@ #include "script_component.hpp" -if(GVAR(autoTrace)) then { + +private ["_color", "_data", "_index", "_obj", "_objSpd", "_origin", "_positions"]; + +if (GVAR(autoTrace)) then { [] call FUNC(startTracing); }; @@ -12,9 +15,9 @@ if((count _this) > 2) then { _color = _this select 2; }; _positions = []; -_objVel = velocity _obj; -_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); -_positions set[(count _positions), [(getPos _obj), _objTVel]]; -_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color]; +_objSpd = vectorMagnitude (velocity _obj); +_positions set[(count _positions), [(getPos _obj), _objSpd]]; +_data = [_origin, typeOf _origin, typeOf _obj, _objSpd, _positions, _color]; + GVAR(traces) set[_index, _data]; -[DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler; \ No newline at end of file +[DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler; diff --git a/addons/frag/functions/fnc_denyFrag.sqf b/addons/frag/functions/fnc_denyFrag.sqf deleted file mode 100644 index 6c4aa9bf8d..0000000000 --- a/addons/frag/functions/fnc_denyFrag.sqf +++ /dev/null @@ -1,7 +0,0 @@ -#include "script_component.hpp" - -private ["_ret"]; -_ret = [(_this select 0)] call FUNC(removeTrack); -if(!_ret) then { - [(_this select 0)] call FUNC(addBlackList); -}; \ No newline at end of file diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index cb54cb776b..d2e64dbbfb 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -3,13 +3,9 @@ #ifdef DEBUG_MODE_FULL GVAR(traceFrags) = true; #endif -// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; -private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive", - "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", - "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", - "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", - "_fragment"]; +// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; +private ["_params", "_hitData", "_initialData", "_hpData", "_object", "_foundObjects", "_index", "_foundObjecsts", "_roundType", "_round", "_caliber", "_explosive", "_idh", "_alive", "_exit", "_vm", "_velocity", "_oldVelocity", "_curVelocity", "_diff", "_polar", "_unitDir", "_spallPos", "_pos1", "_i", "_pos2", "_blah", "_data", "_spallPolar", "_warn", "_c", "_m", "_k", "_gC", "_fragPower", "_fragTypes", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", "_fragType", "_fragment", "_pos"]; _params = _this select 0; [(_this select 1)] call cba_fnc_removePerFrameHandler; @@ -45,8 +41,8 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _vm = 1; _velocity = _initialData select 5; - _oldVelocity = _velocity call BIS_fnc_magnitude; - _curVelocity = (velocity _round) call BIS_fnc_magnitude; + _oldVelocity = vectorMagnitude _velocity; + _curVelocity = vectorMagnitude (velocity _round); if(alive _round) then { _diff = _velocity vectorDiff (velocity _round); @@ -66,16 +62,8 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _pos = _hpData select 3; _spallPos = nil; for "_i" from 0 to 100 do { - _pos1 = [ - (_pos select 0) + (((_unitDir select 0)*0.01)*_i), - (_pos select 1) + (((_unitDir select 1)*0.01)*_i), - (_pos select 2) + (((_unitDir select 2)*0.01)*_i) - ]; - _pos2 = [ - (_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)), - (_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)), - (_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1)) - ]; + _pos1 = _pos vectorAdd (_unitDir vectorMultiply (0.01 * _i)); + _pos2 = _pos vectorAdd (_unitDir vectorMultiply (0.01 * (_i + 1))); // _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)]; // diag_log text format["b: %1", _blah]; diff --git a/addons/frag/functions/fnc_drawTraces.sqf b/addons/frag/functions/fnc_drawTraces.sqf index b9645bab97..e61fc9b5ba 100644 --- a/addons/frag/functions/fnc_drawTraces.sqf +++ b/addons/frag/functions/fnc_drawTraces.sqf @@ -1,13 +1,13 @@ #include "script_component.hpp" + +private ["_color", "_index", "_lastPos", "_lastSpd", "_max", "_positions", "_startSpeed"]; + { _positions = _x select 4; _color = _x select 5; _index = 0; _max = count _positions; - _startSpeed = (_positions select 0) select 1; - if(_startSpeed <= 0) then { - _startSpeed = 0.01; - }; + _startSpeed = 0.01 max ((_positions select 0) select 1); _lastSpd = []; _lastPos = []; while {_index < _max} do { @@ -29,4 +29,4 @@ _lastSpd = _data1 select 1; }; // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"]; -} forEach GVAR(traces); \ No newline at end of file +} forEach GVAR(traces); diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index 85f5f45c0a..9b89e40897 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -1,15 +1,21 @@ #include "script_component.hpp" -private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall"]; -if !(!isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {}; + +private ["_enabled", "_gun", "_type", "_round", "_doFragTrack", "_doSpall", "_spallTrack", "_spallTrackID"]; + +if (!GVAR(enabled)) exitWith {}; _gun = _this select 0; _type = _this select 4; _round = _this select 6; +_enabled = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(enabled)); +if(_enabled < 1) exitWith {}; + if(_round in GVAR(blackList)) exitWith { GVAR(blackList) = GVAR(blackList) - [_round]; }; + _doFragTrack = false; if(_gun == ACE_player) then { _doFragTrack = true; diff --git a/addons/frag/functions/fnc_frag_trace.sqf b/addons/frag/functions/fnc_frag_trace.sqf deleted file mode 100644 index 664e117793..0000000000 --- a/addons/frag/functions/fnc_frag_trace.sqf +++ /dev/null @@ -1,10 +0,0 @@ -#include "script_component.hpp" - -private ["_params", "_shell"]; -_params = _this select 0; -_shell = _params select 0; -if(alive _shell) then { - drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""]; -} else { - [_this select 1] call cba_fnc_removePerFrameHandler; -}; \ No newline at end of file diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index a396de04e8..43eb9d5a67 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -9,13 +9,8 @@ if(!isServer) exitWith { }; // _startTime = diag_tickTime; -private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", - "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", - "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", - "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", - "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", - "_sectorSize", "_sectorOffset", "_randomDir"]; +private ["_startTime", "_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_boundingBox", "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", "_currentCount", "_count", "_vecVar", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", "_sectorSize", "_sectorOffset", "_i", "_randomDir", "_endTime", "_target"]; _round = _this select 0; _lastPos = _this select 1; @@ -159,11 +154,7 @@ if(_isArmed && (count _objects) > 0) then { _vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)]; _fp = (_fragPower-(random (_fragPowerRandom))); - _vel = [ - (_vec select 0)*_fp, - (_vec select 1)*_fp, - (_vec select 2)*_fp - ]; + _vel = _vec vectorMultiply _fp; _fragType = round (random ((count _fragTypes)-1)); _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; @@ -198,14 +189,10 @@ if(_isArmed && (count _objects) > 0) then { _sectorOffset = 360 * (_i - 1) / (_randomCount max 1); _randomDir = random(_sectorSize); _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; - + _fp = (_fragPower-(random (_fragPowerRandom))); - - _vel = [ - (_vec select 0)*_fp, - (_vec select 1)*_fp, - (_vec select 2)*_fp - ]; + + _vel = _vec vectorMultiply _fp; _fragType = round (random ((count _fragTypes)-1)); _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; diff --git a/addons/frag/functions/fnc_spallHP.sqf b/addons/frag/functions/fnc_spallHP.sqf index fb894be499..5e3719cb47 100644 --- a/addons/frag/functions/fnc_spallHP.sqf +++ b/addons/frag/functions/fnc_spallHP.sqf @@ -1,15 +1,15 @@ #include "script_component.hpp" -private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"]; +private ["_initialData", "_hpData", "_round", "_hpRound", "_hpDirect"]; //player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))]; -if((_this select 0) <= (count GVAR(spallHPData))) then { + +if ((_this select 0) <= (count GVAR(spallHPData))) then { _initialData = GVAR(spallHPData) select (_this select 0); - if(!isNil "_initialData") then { + if (!isNil "_initialData") then { _hpRound = ((_this select 1) select 0) select 2; _round = _initialData select 3; _hpDirect = ((_this select 1) select 0) select 10; - if(_hpDirect && {_round == _hpRound}) then { - + if (_hpDirect && {_round == _hpRound}) then { { _hpData = _x; _round = _initialData select 3; @@ -26,4 +26,4 @@ if((_this select 0) <= (count GVAR(spallHPData))) then { } forEach (_this select 1); }; }; -}; \ No newline at end of file +}; diff --git a/addons/frag/functions/fnc_spallTrack.sqf b/addons/frag/functions/fnc_spallTrack.sqf index a264e1ded9..4b7a06bc65 100644 --- a/addons/frag/functions/fnc_spallTrack.sqf +++ b/addons/frag/functions/fnc_spallTrack.sqf @@ -1,30 +1,22 @@ //fnc_spallTrack.sqf #include "script_component.hpp" -private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"]; -// setAccTime 0; + +private ["_round", "_multiplier", "_foundObjects", "_foundObjectHPIds", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_hpId", "_data"]; _round = _this select 0; _multiplier = _this select 1; _foundObjects = _this select 2; _foundObjectHPIds = _this select 3; -_delta = (1/diag_fps)*_multiplier; +_delta = (1/diag_fps) * _multiplier; _curPos = getPosASL _round; _velocity = velocity _round; -_velocityStep = [ - (_velocity select 0)*_delta, - (_velocity select 1)*_delta, - (_velocity select 2)*_delta - ]; -_forwardPos = [ - (_curPos select 0) + (_velocityStep select 0), - (_curPos select 1) + (_velocityStep select 1), - (_curPos select 2) + (_velocityStep select 2) - ]; - +_velocityStep = _velocity vectorMultiply _delta; +_forwardPos = _curPos vectorAdd _velocityStep; + _intersectsWith = lineIntersectsWith [_curPos, _forwardPos]; -if(count _intersectsWith > 0) then { +if (count _intersectsWith > 0) then { // player sideChat format["inter: %1", _intersectsWith]; { if(!(_x in _foundObjects)) then { @@ -37,4 +29,4 @@ if(count _intersectsWith > 0) then { GVAR(spallHPData) set[_index, _data]; }; } forEach _intersectsWith; -}; \ No newline at end of file +}; diff --git a/addons/frag/functions/fnc_trackFragRound.sqf b/addons/frag/functions/fnc_trackFragRound.sqf index 4358448188..8db68c99e8 100644 --- a/addons/frag/functions/fnc_trackFragRound.sqf +++ b/addons/frag/functions/fnc_trackFragRound.sqf @@ -1,6 +1,6 @@ //fnc_trackFragRound.sqf #include "script_component.hpp" -private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; +private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_spallTrack", "_foundObjectHPIds", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; _params = _this select 0; _round = _params select 0; _lastPos = _params select 1; diff --git a/addons/frag/functions/fnc_trackTrace.sqf b/addons/frag/functions/fnc_trackTrace.sqf index b0f3f06633..371d58b3b1 100644 --- a/addons/frag/functions/fnc_trackTrace.sqf +++ b/addons/frag/functions/fnc_trackTrace.sqf @@ -1,14 +1,14 @@ #include "script_component.hpp" + +private ["_params", "_tracerObj", "_index", "_positions", "_data"]; _params = _this select 0; _tracerObj = _params select 0; _index = _params select 1; -if(alive _tracerObj && (count GVAR(traces)) > 0) then { +if (alive _tracerObj && (count GVAR(traces)) > 0) then { _data = GVAR(traces) select _index; _positions = _data select 4; - _objVel = velocity _tracerObj; - _objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); - _positions set[(count _positions), [(getPos _tracerObj), _objTVel]]; + _positions set[(count _positions), [(getPos _tracerObj), vectorMagnitude (velocity _tracerObj)]]; } else { [(_this select 1)] call cba_fnc_removePerFrameHandler; -}; \ No newline at end of file +}; diff --git a/addons/frag/functions/fnc_vectorDiffFast.sqf b/addons/frag/functions/fnc_vectorDiffFast.sqf deleted file mode 100644 index 0a41860727..0000000000 --- a/addons/frag/functions/fnc_vectorDiffFast.sqf +++ /dev/null @@ -1,15 +0,0 @@ -#include "script_component.hpp" -private["_p1","_p2","_return"]; - -_p1 = _this select 0; -_p2 = _this select 1; - -if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]}; - -_return = []; - -{ - _return set[_forEachIndex, (_p2 select _forEachIndex) - _x]; -} forEach _p1; - -_return diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index e34ad2b681..e7ebb7c1bf 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -11,6 +11,7 @@ Désactive la fragmentation Repeszek letiltása Disattiva la frammentazione + Desabilitar Fragmentação diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index 4fcf4fc055..a6fe7c415f 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" if (!hasInterface) exitWith {}; -["ACE3", QGVAR(wipeGlasses), localize "STR_ACE_Goggles_WipeGlasses", +["ACE3 Common", QGVAR(wipeGlasses), localize "STR_ACE_Goggles_WipeGlasses", { if (!(GETVAR(ace_player,ACE_isUnconscious,false))) exitWith { call FUNC(clearGlasses); diff --git a/addons/grenades/XEH_postInit.sqf b/addons/grenades/XEH_postInit.sqf index 7572a41c10..63516407f3 100644 --- a/addons/grenades/XEH_postInit.sqf +++ b/addons/grenades/XEH_postInit.sqf @@ -10,7 +10,7 @@ GVAR(flashbangPPEffectCC) = ppEffectCreate ["ColorCorrections", 4265]; GVAR(flashbangPPEffectCC) ppEffectForceInNVG true; // Add keybinds -["ACE3", QGVAR(switchGrenadeMode), localize "STR_ACE_Grenades_SwitchGrenadeMode", +["ACE3 Weapons", QGVAR(switchGrenadeMode), localize "STR_ACE_Grenades_SwitchGrenadeMode", { // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index c1ff10143d..522c370777 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -52,7 +52,7 @@ Roll Grenade Granate rollen - Rodar granada + Lanzamiento raso Po ziemi Po zemi Lancer roulé @@ -88,14 +88,14 @@ Also known as flashbang. Causes immediate flash blindness, deafness, tinnitus, and inner ear disturbance. Verursacht temporäre Blind- und Taubheit. - Produce de manera inmediata ceguera, sordera, tinitus y afecta el oído interior. + Tambien conocida como granada cegadora. Produce de manera inmediata ceguera, sordera, tinitus y afecta el oído interior. Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes. Znany też jako flashbang. Powoduje natychmiastową tymczasową ślepotę, głuchotę, dzwonienie w uszach i inne zaburzenia ucha wewnętrznego. Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu. XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. Villanógránát néven is ismert. Azonnali villanási vakságot, süketséget, fülzúgást, és belső füli zavart okoz. Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano. - Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça. + Também conhecida como flashbang. Causa uma clarão imediato, cegueira, surdez, zumbido e distúrbio no tímpano. M127A1 Hand Held Signal (White) @@ -152,7 +152,7 @@ Kézi jelzőrakéta, Fehér színű Bengala (Bianco) Flara ręczna (biała) - Sinalizador (Branco) + Sinalizador de Mão (Branco) Фальшфейер (Белый) Bengala (Blanca) Feux à main (Blanc) @@ -164,7 +164,7 @@ Kézi jelzőrakéta, Piros színű Bengala (Rosso) Flara ręczna (czerwona) - Sinalizador (Vermelho) + Sinalizador de Mão (Vermelho) Фальшфейер (Красный) Bengala (Roja) Feux à main (Rouge) @@ -176,7 +176,7 @@ Kézi jelzőrakéta, Zöld színű Bengala (Verde) Flara ręczna (zielona) - Sinalizador (Verde) + Sinalizador de Mão (Verde) Фальшфейер (Зелёный) Bengala (Verde) Feux à main (Vert) @@ -188,7 +188,7 @@ Kézi jelzőrakéta, Sárga színű Bengala (Giallo) Flara ręczna (żółta) - Sinalizador (Amarelo) + Sinalizador de Mão (Amarelo) Фальшфейер (Жёлтые) Bengala (Amarilla) Feux à main (Jaune) @@ -242,4 +242,4 @@ M127A1 (Amarilla) - \ No newline at end of file + diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index 6a603c3c3a..b456b3b872 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -21,7 +21,7 @@ */ #include "script_component.hpp" -private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation"]; +private ["_silencer", "_audibleFireCoef", "_audibleFire", "_loudness", "_strength", "_vehAttenuation"]; PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo); diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 9bc9063c8d..e6f59604a3 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -106,7 +106,8 @@ Vypnout pískání v uších Wyłącz dzwonienie w uszach Fülcsengés letiltása - Disabilita il ronzio + Disabilita i fischi nelle orecchie + Desabilitar zumbido de ouvidos diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index faabf773f4..bbd2b74263 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -5,11 +5,11 @@ if (!hasInterface) exitWith {}; GVAR(ParsedTextCached) = []; -//Setup text/shadow color matrix +//Setup text/shadow/size/color settings matrix [] call FUNC(setupTextColors); ["SettingChanged", { - PARAMS_2(_name,_value); - if ((_name == QGVAR(colorTextMax)) || {_name == QGVAR(colorTextMin)} || {_name == QGVAR(colorShadowMax)} || {_name == QGVAR(colorShadowMin)}) then { + PARAMS_1(_name); + if (_name in [QGVAR(colorTextMax), QGVAR(colorTextMin), QGVAR(colorShadowMax), QGVAR(colorShadowMin), QGVAR(textSize), QGVAR(shadowSetting)]) then { [] call FUNC(setupTextColors); }; }] call EFUNC(common,addEventhandler); @@ -28,24 +28,22 @@ addMissionEventHandler ["Draw3D", DFUNC(render)]; }; -["ACE3", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"), +["ACE3 Common", QGVAR(InteractKey), (localize "STR_ACE_Interact_Menu_InteractKey"), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Statement [0] call FUNC(keyDown) -}, -{[0] call FUNC(keyUp)}, +},{[0,false] call FUNC(keyUp)}, [219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key -["ACE3", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"), +["ACE3 Common", QGVAR(SelfInteractKey), (localize "STR_ACE_Interact_Menu_SelfInteractKey"), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Statement [1] call FUNC(keyDown) -}, -{[1] call FUNC(keyUp)}, +},{[1,false] call FUNC(keyUp)}, [219, [false, true, false]], false] call cba_fnc_addKeybind; //Left Windows Key + Ctrl/Strg @@ -59,7 +57,7 @@ addMissionEventHandler ["Draw3D", DFUNC(render)]; if (_unit != ACE_player || !_isUnconscious) exitWith {}; GVAR(actionSelected) = false; - [] call FUNC(keyUp); + [GVAR(openedMenuType), false] call FUNC(keyUp); }] call EFUNC(common,addEventhandler); // disable firing while the interact menu is is is opened diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index c79c9cd6d1..52f2f6b9f9 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -24,6 +24,13 @@ class ACE_Settings { typeName = "BOOL"; isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction"; + }; + class GVAR(cursorKeepCentered) { + value = 0; + typeName = "BOOL"; + isClientSettable = 1; + displayName = "$STR_ACE_Interact_cursorKeepCentered"; + description = "$STR_ACE_Interact_cursorKeepCenteredDescription"; }; class GVAR(AlwaysUseCursorInteraction) { value = 0; @@ -42,27 +49,48 @@ class ACE_Settings { typeName = "COLOR"; isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_ColorTextMax"; - }; + }; class GVAR(colorTextMin) { value[] = {1, 1, 1, 0.25}; typeName = "COLOR"; isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_ColorTextMin"; - }; + }; class GVAR(colorShadowMax) { value[] = {0, 0, 0, 1}; typeName = "COLOR"; isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_ColorShadowMax"; - }; + }; class GVAR(colorShadowMin) { value[] = {0, 0, 0, 0.25}; typeName = "COLOR"; isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_ColorShadowMin"; }; + class GVAR(textSize) { + value = 2; + typeName = "SCALAR"; + isClientSettable = 1; + displayName = "$STR_ACE_Interact_textSize"; + values[] = {"$str_very_small", "$str_small", "$str_medium", "$str_large", "$str_very_large"}; + }; + class GVAR(shadowSetting) { + value = 2; + typeName = "SCALAR"; + isClientSettable = 1; + displayName = "$STR_ACE_Interact_shadowSetting"; + description = "$STR_ACE_Interact_shadowSettingDescription"; + values[] = {"$STR_A3_OPTIONS_DISABLED", "$STR_A3_OPTIONS_ENABLED", "$STR_ACE_Interact_shadowOutline"}; + }; + class GVAR(actionOnKeyRelease) { + value = 1; + typeName = "BOOL"; + isClientSettable = 1; + displayName = "$STR_ACE_Interact_Menu_ActionOnKeyRelease"; + }; }; class ACE_Extensions { - extensions[] += {"ace_breakLine"}; + extensions[] += {"ace_break_line"}; }; diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index bd2023a90d..7b995375b7 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -26,8 +26,7 @@ if !(isNil {missionNamespace getVariable [_actionsVarName, nil]}) exitWith {}; private "_recurseFnc"; _recurseFnc = { - private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_selection", "_condition", "_showDisabled", - "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction"]; + private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_position", "_condition", "_showDisabled", "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction", "_i"]; EXPLODE_1_PVT(_this,_actionsCfg); _actions = []; @@ -39,13 +38,18 @@ _recurseFnc = { _icon = getText (_entryCfg >> "icon"); _statement = compile (getText (_entryCfg >> "statement")); - _selection = ""; - if (isArray ( _entryCfg >> "selection" )) then { - _selection = getArray ( _entryCfg >> "selection" ) + // If the position entry is present, compile it + _position = getText (_entryCfg >> "position"); + if (_position != "") then { + _position = compile _position; } else { - _selection = getText (_entryCfg >> "selection"); - if (_selection == "") then { - _selection = [0,0,0]; + // If the not, but the selection entry is present use that + _position = getText (_entryCfg >> "selection"); + if (_position != "") then { + _position = compile format ["_target selectionPosition '%1'", _position]; + } else { + // Otherwise, just use the origin + _position = {[0,0,0]}; }; }; @@ -77,7 +81,7 @@ _recurseFnc = { _condition, _insertChildren, [], - _selection, + _position, _distance, [_showDisabled,_enableInside,_canCollapse,_runOnHover], _modifierFunction @@ -106,7 +110,7 @@ missionNamespace setVariable [_actionsVarName, [_actionsCfg] call _recurseFnc]; { true }, {}, [], - [0,0,0], + {[0,0,0]}, 1, [false,false,false] ], diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf index 0258b3dc8a..e767c3525d 100644 --- a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -14,7 +14,7 @@ EXPLODE_1_PVT(_this,_target); -private ["_objectType","_actionsVarName"]; +private ["_objectType","_actionsVarName", "_canCollapse", "_children", "_enableInside", "_entry", "_entryCfg", "_i", "_insertChildren", "_modifierFunction", "_runOnHover"]; _objectType = _target; if (typeName _target == "OBJECT") then { _objectType = typeOf _target; @@ -26,7 +26,7 @@ if !(isNil {missionNamespace getVariable [_actionsVarName, nil]}) exitWith {}; private "_recurseFnc"; _recurseFnc = { - private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_selection", "_condition", "_showDisabled", + private ["_actions", "_displayName", "_icon", "_statement", "_condition", "_showDisabled", "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_insertChildren", "_modifierFunction"]; EXPLODE_1_PVT(_this,_actionsCfg); _actions = []; @@ -64,7 +64,7 @@ _recurseFnc = { _statement, _condition, _insertChildren, - [], + {}, [0,0,0], 10, //distace [_showDisabled,_enableInside,_canCollapse,_runOnHover], @@ -113,7 +113,7 @@ _actions = [ }, {[ACE_player, _target, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering"]] call EFUNC(common,canInteractWith)}, {}, - [], + {}, "Spine3", 10, [false,true,false] diff --git a/addons/interact_menu/functions/fnc_createAction.sqf b/addons/interact_menu/functions/fnc_createAction.sqf index fb3f05b7b5..b26cb186f3 100644 --- a/addons/interact_menu/functions/fnc_createAction.sqf +++ b/addons/interact_menu/functions/fnc_createAction.sqf @@ -11,7 +11,7 @@ * 4: Condition * 5: Insert children code (Optional) * 6: Action parameters (Optional) - * 7: Position (Position or Selection Name) or (Optional) + * 7: Position (Position array, Position code or Selection Name) , or (Optional) * 8: Distance (Optional) * 9: Other parameters (Optional) * 10: Modifier function (Optional) @@ -28,6 +28,7 @@ EXPLODE_5_PVT(_this,_actionName,_displayName,_icon,_statement,_condition); +// IGNORE_PRIVATE_WARNING(_target); private ["_insertChildren","_customParams","_position","_distance","_params", "_modifierFunction"]; _insertChildren = if (count _this > 5) then { @@ -43,9 +44,19 @@ _customParams = if (count _this > 6) then { }; _position = if (count _this > 7) then { - _this select 7 + if (typeName (_this select 7) == "STRING") then { + // If the action is set to a selection, create the suitable code + compile format ["_target selectionPosition '%1'", _this select 7]; + } else { + if (typeName (_this select 7) == "ARRAY") then { + // If the action is set to a array position, create the suitable code + compile format ["%1", _this select 7]; + } else { + _this select 7 + }; + } } else { - [0,0,0] + {[0,0,0]} }; _distance = if (count _this > 8) then { diff --git a/addons/interact_menu/functions/fnc_findActionNode.sqf b/addons/interact_menu/functions/fnc_findActionNode.sqf index 4027b7a852..b8639754d2 100644 --- a/addons/interact_menu/functions/fnc_findActionNode.sqf +++ b/addons/interact_menu/functions/fnc_findActionNode.sqf @@ -19,7 +19,7 @@ EXPLODE_2_PVT(_this,_actionTreeList,_parentPath); -private ["_parentNode", "_foundParentNode", "_fnc_findFolder"]; +private ["_parentNode", "_foundParentNode", "_fnc_findFolder", "_actionTree"]; // Hack to make this work on the root node too if (count _parentPath == 0) exitWith { diff --git a/addons/interact_menu/functions/fnc_handlePlayerChanged.sqf b/addons/interact_menu/functions/fnc_handlePlayerChanged.sqf index fe25853733..cb21d218db 100644 --- a/addons/interact_menu/functions/fnc_handlePlayerChanged.sqf +++ b/addons/interact_menu/functions/fnc_handlePlayerChanged.sqf @@ -15,7 +15,11 @@ EXPLODE_2_PVT(_this,_newUnit,_oldUnit); // add to new unit private "_ehid"; -_ehid = [_newUnit, "DefaultAction", {EGVAR(interact_menu,openedMenuType) >= 0}, {}] call EFUNC(common,addActionEventHandler); +_ehid = [_newUnit, "DefaultAction", {GVAR(openedMenuType) >= 0}, { + if (!GVAR(actionOnKeyRelease) && GVAR(actionSelected)) then { + [GVAR(openedMenuType),true] call FUNC(keyUp); + }; +}] call EFUNC(common,addActionEventHandler); _newUnit setVariable [QGVAR(AAEHID), _ehid]; diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index 37e5bc3797..5416440269 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -43,8 +43,20 @@ if (GVAR(useCursorMenu)) then { // uiNamespace getVariable QGVAR(dlgCursorMenu); // uiNamespace getVariable QGVAR(cursorMenuOpened); ctrlEnable [91921, true]; + GVAR(cursorPos) = [0.5,0.5,0]; ((finddisplay 91919) displayctrl 91921) ctrlAddEventHandler ["MouseMoving", { - GVAR(cursorPos) = [_this select 1, _this select 2, 0]; + if (GVAR(cursorKeepCentered)) then { + GVAR(cursorPos) = GVAR(cursorPos) vectorAdd [_this select 1, _this select 2, 0] vectorDiff [0.5, 0.5, 0]; + setMousePosition [0.5, 0.5]; + } else { + GVAR(cursorPos) = [_this select 1, _this select 2, 0]; + }; + }]; + // handles LMB in cursor mode when action on keyrelease is disabled + ((finddisplay 91919) displayctrl 91921) ctrlAddEventHandler ["MouseButtonDown", { + if (!GVAR(actionOnKeyRelease) && GVAR(actionSelected)) then { + [GVAR(openedMenuType),true] call FUNC(keyUp); + }; }]; setMousePosition [0.5, 0.5]; }; @@ -52,6 +64,13 @@ if (GVAR(useCursorMenu)) then { GVAR(selfMenuOffset) = ((positionCameraToWorld [0, 0, 2]) call EFUNC(common,positionToASL)) vectorDiff ((positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL)); +private ["_wavesAtOrigin", "_wavesAtVirtualPoint"]; + +_wavesAtOrigin = [(positionCameraToWorld [0, 0, 0])] call EFUNC(common,waveHeightAt); +_wavesAtVirtualPoint = [(positionCameraToWorld [0, 0, 2])] call EFUNC(common,waveHeightAt); +GVAR(selfMenuOffset) set [2, ((GVAR(selfMenuOffset) select 2) + _wavesAtOrigin - _wavesAtVirtualPoint)]; + + ["interactMenuOpened", [_menuType]] call EFUNC(common,localEvent); true diff --git a/addons/interact_menu/functions/fnc_keyUp.sqf b/addons/interact_menu/functions/fnc_keyUp.sqf index 735130e69a..7b24497802 100644 --- a/addons/interact_menu/functions/fnc_keyUp.sqf +++ b/addons/interact_menu/functions/fnc_keyUp.sqf @@ -12,6 +12,9 @@ */ #include "script_component.hpp" +private "_calledByClicking"; +_calledByClicking = _this select 1; + // Exit if there's no menu opened if (GVAR(openedMenuType) < 0) exitWith {true}; @@ -29,6 +32,9 @@ if(GVAR(actionSelected)) then { // Clear the conditions caches ["clearConditionCaches", []] call EFUNC(common,localEvent); + // exit scope if selecting an action on key release is disabled + if (!(GVAR(actionOnKeyRelease)) && !_calledByClicking) exitWith {}; + // Check the action conditions _actionData = GVAR(selectedAction) select 0; if ([_target, _player, _actionData select 6] call (_actionData select 4)) then { diff --git a/addons/interact_menu/functions/fnc_removeActionFromClass.sqf b/addons/interact_menu/functions/fnc_removeActionFromClass.sqf index 898228d6d8..c407273258 100644 --- a/addons/interact_menu/functions/fnc_removeActionFromClass.sqf +++ b/addons/interact_menu/functions/fnc_removeActionFromClass.sqf @@ -19,7 +19,7 @@ EXPLODE_3_PVT(_this,_objectType,_typeNum,_fullPath); -private ["_res","_varName","_actionTrees"]; +private ["_res","_varName","_actionTrees", "_actionIndex", "_parentLevel", "_parentNode"]; _res = _fullPath call FUNC(splitPath); EXPLODE_2_PVT(_res,_parentPath,_actionName); diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index 01a550eb91..06c155ac54 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -14,7 +14,7 @@ BEGIN_COUNTER(fnc_render); -private ["_cursorPos1", "_cursorPos2", "_cursorVec", "_p1", "_p2", "_p", "_v", "_cp", "_forEachIndex", "_renderTargets", "_x", "_cursorScreenPos", "_closestDistance", "_closestSelection", "_pos", "_sPos", "_disSq", "_closest", "_cTime", "_delta", "_foundTarget", "_misMatch", "_hoverPath", "_i"]; +private ["_cursorPos1", "_cursorPos2", "_p1", "_p2", "_forEachIndex", "_x", "_cursorScreenPos", "_closestDistance", "_closestSelection", "_sPos", "_disSq", "_closest", "_cTime", "_delta", "_foundTarget", "_misMatch", "_hoverPath", "_i", "_actionData", "_player", "_target"]; _foundTarget = false; _cursorPos1 = positionCameraToWorld [0, 0, 0]; _cursorPos2 = positionCameraToWorld [0, 0, 2]; diff --git a/addons/interact_menu/functions/fnc_renderActionPoints.sqf b/addons/interact_menu/functions/fnc_renderActionPoints.sqf index 78d5418e5a..6579bd33e7 100644 --- a/addons/interact_menu/functions/fnc_renderActionPoints.sqf +++ b/addons/interact_menu/functions/fnc_renderActionPoints.sqf @@ -14,7 +14,7 @@ GVAR(currentOptions) = []; -private ["_player","_numInteractObjects","_numInteractions","_actionsVarName","_classActions","_objectActions","_target","_player","_action","_actionData","_active","_cameraPos","_cameraDir"]; +private ["_player","_numInteractObjects","_numInteractions","_actionsVarName","_classActions","_target","_player","_action","_cameraPos","_cameraDir", "_lambda", "_nearestObjects", "_pos", "_virtualPoint", "_wavesAtOrigin", "_wavesAtVirtualPoint"]; _player = ACE_player; _fnc_renderNearbyActions = { @@ -101,14 +101,19 @@ _fnc_renderSelfActions = { // Iterate through base level class actions and render them if appropiate _actionsVarName = format [QGVAR(SelfAct_%1), typeOf _target]; _classActions = missionNamespace getVariable [_actionsVarName, []]; + + _pos = if !(GVAR(useCursorMenu)) then { + _virtualPoint = (((positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL)) vectorAdd GVAR(selfMenuOffset)) call EFUNC(common,ASLToPosition); + _wavesAtOrigin = [(positionCameraToWorld [0, 0, 0])] call EFUNC(common,waveHeightAt); + _wavesAtVirtualPoint = [_virtualPoint] call EFUNC(common,waveHeightAt); + _virtualPoint set [2, ((_virtualPoint select 2) - _wavesAtOrigin + _wavesAtVirtualPoint)]; + _virtualPoint + } else { + [0.5, 0.5] + }; + { _action = _x; - - _pos = if !(GVAR(useCursorMenu)) then { - (((positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL)) vectorAdd GVAR(selfMenuOffset)) call EFUNC(common,ASLToPosition) - } else { - [0.5, 0.5] - }; [_target, _action, _pos] call FUNC(renderBaseMenu); } forEach _classActions; }; diff --git a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf index a5214ddcbe..ca26fb984d 100644 --- a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf @@ -16,7 +16,7 @@ BEGIN_COUNTER(fnc_renderBaseMenu) -private ["_distance","_pos","_weaponDir","_ref","_cameraPos","_sPos","_activeActionTree"]; +private ["_distance","_pos","_weaponDir","_ref","_sPos","_activeActionTree", "_line"]; EXPLODE_2_PVT(_this,_object,_baseActionNode); EXPLODE_1_PVT(_baseActionNode,_actionData); @@ -24,21 +24,15 @@ EXPLODE_1_PVT(_baseActionNode,_actionData); _distance = _actionData select 8; // Obtain a 3D position for the action -if((count _this) > 2) then { - _pos = _this select 2; +_pos = if((count _this) > 2) then { + _this select 2 } else { - if(typeName (_actionData select 7) == "ARRAY") then { - _pos = _object modelToWorldVisual (_actionData select 7); - } else { - if ((_actionData select 7) == "weapon") then { - // Craft a suitable position for weapon interaction - _weaponDir = _object weaponDirection currentWeapon _object; - _ref = _weaponDir call EFUNC(common,createOrthonormalReference); - _pos = (_object modelToWorldVisual (_object selectionPosition "righthand")) vectorAdd ((_ref select 2) vectorMultiply 0.1); - } else { - _pos = _object modelToWorldVisual (_object selectionPosition (_actionData select 7)); - }; - }; + // Setup scope variables for position code + private ["_target"]; + _target = _object; + + // Get action position + _object modelToWorldVisual (call (_actionData select 7)) }; // For non-self actions, exit if the action is too far away or ocluded @@ -50,11 +44,12 @@ if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player && if (_actualDistance > _distance) exitWith {true}; - if (_distance > 1.0) exitWith { - // If distance to action is greater than 1.0 m, check LOS + if (_actualDistance > 1.5) exitWith { + // If distance to action is greater than 1.5 m, check LOS _line = [_headPos call EFUNC(common,positionToASL), _pos call EFUNC(common,positionToASL), _object, ACE_player]; lineIntersects _line }; + false }) exitWith {false}; // Exit if the action is behind you diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf index 32e8aa1a63..180b5a3c36 100644 --- a/addons/interact_menu/functions/fnc_renderIcon.sqf +++ b/addons/interact_menu/functions/fnc_renderIcon.sqf @@ -6,9 +6,7 @@ * 0: Text * 1: Icon * 2: 2d position - * 3: Color - * 4: Shadow Color - * 5: Icon Color + * 3: Text Settings * * Return value: * None @@ -17,8 +15,8 @@ */ #include "script_component.hpp" #define DEFAULT_ICON QUOTE(\z\ace\addons\interaction\ui\dot_ca.paa) -private ["_ctrl"]; -PARAMS_6(_text,_icon,_sPos,_textColor,_shadowColor,_iconColor); +private ["_ctrl", "_pos", "_displayNum"]; +PARAMS_4(_text,_icon,_sPos,_textSettings); //systemChat format ["Icon %1 - %2,%3", _text, _sPos select 0, _sPos select 1]; @@ -27,23 +25,31 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then { GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]); }; _ctrl = GVAR(iconCtrls) select GVAR(iconCount); + if(_icon == "") then { _icon = DEFAULT_ICON; }; _text = if (GVAR(UseListMenu)) then { - format ["%5", _icon, _iconColor, _textColor, _shadowColor, _text] + format ["%3", _icon, _textSettings, _text] } else { - format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text]; + format ["
%3", _icon, _textSettings, "ace_break_line" callExtension _text]; }; //_ctrl ctrlSetStructuredText parseText _text; [_ctrl, GVAR(iconCount), _text] call FUNC(ctrlSetParsedTextCached); GVAR(iconCount) = GVAR(iconCount) + 1; -if (GVAR(UseListMenu)) then { - _ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW]; +_pos = if (GVAR(UseListMenu)) then { + [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW] } else { - _ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW]; + [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW] }; + +if (GVAR(cursorKeepCentered) && {uiNamespace getVariable [QGVAR(cursorMenuOpened),false]}) then { + _pos set [0, ((_pos select 0) - (GVAR(cursorPos) select 0) + 0.5)]; + _pos set [1, ((_pos select 1) - (GVAR(cursorPos) select 1) + 0.5)]; +}; + +_ctrl ctrlSetPosition _pos; _ctrl ctrlCommit 0; diff --git a/addons/interact_menu/functions/fnc_renderMenu.sqf b/addons/interact_menu/functions/fnc_renderMenu.sqf index e80e9d41ab..84c7799684 100644 --- a/addons/interact_menu/functions/fnc_renderMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderMenu.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" -private ["_menuInSelectedPath", "_path", "_menuDepth", "_currentRenderDepth", "_x", "_offset", "_newPos", "_forEachIndex"]; +private ["_menuInSelectedPath", "_path", "_menuDepth", "_x", "_offset", "_newPos", "_forEachIndex", "_player", "_pos", "_target", "_textSettings"]; EXPLODE_4_PVT(_this,_parentPath,_action,_sPos,_angles); EXPLODE_3_PVT(_action,_actionData,_activeChildren,_actionObject); @@ -43,19 +43,16 @@ _menuInSelectedPath = true; //END_COUNTER(constructing_paths); //BEGIN_COUNTER(constructing_colors); -// Render icon -// ARGB Color (First Hex Pair is transparancy) -_textColor = GVAR(colorSelected); -_shadowColor = GVAR(colorSelectedShadow); +//Get text color settings string +_textSettings = GVAR(colorSelectedSettings); if(!_menuInSelectedPath) then { - _textColor = (GVAR(colorNotSelectedMatrix) select (count _path)) select _menuDepth; - _shadowColor = (GVAR(colorShadowNotSelectedMatrix) select (count _path)) select _menuDepth; + _textSettings = (GVAR(textSettingsMatrix) select (count _path)) select _menuDepth; }; //END_COUNTER(constructing_colors); //BEGIN_COUNTER(fnc_renderIcons); -[_actionData select 1, _actionData select 2, _sPos, _textColor, _shadowColor, "#FFFFFFFF"] call FUNC(renderIcon); +[_actionData select 1, _actionData select 2, _sPos, _textSettings] call FUNC(renderIcon); //END_COUNTER(fnc_renderIcons); @@ -71,7 +68,7 @@ if !(_menuInSelectedPath) exitWith {true}; //BEGIN_COUNTER(children); -private ["_numChildren","_angleSpan","_angle","_angleInterval","_scale","_offset"]; +private ["_numChildren","_angleSpan","_angle","_angleInterval","_scaleX", "_scaleY", "_offset", "_textSize"]; _numChildren = count _activeChildren; _angleSpan = _maxAngleSpan min (55 * ((_numChildren) - 1)); if (_angleSpan >= 305) then { @@ -90,15 +87,23 @@ if (_numChildren == 1) then { }; // Scale menu based on the amount of children -_scale = if (GVAR(UseListMenu)) then { - 0.17 +_scaleX = 1; +_scaleY = 1; + +if (GVAR(UseListMenu)) then { + _textSize = [0.75, 0.875, 1, 1.2, 1.4] select GVAR(textSize); + _scaleX = _textSize * 0.17 * 1.1; + _scaleY = 0.17 * 0.30 * 4/3; } else { - 0.17 * (((0.8 * (0.46 / sin (0.5 * _angleInterval))) min 1.1) max 0.5) + _textSize = if (GVAR(textSize) > 2) then {1.3} else {1}; + _scaleX = _textSize * 0.17 * (((0.8 * (0.46 / sin (0.5 * _angleInterval))) min 1.1) max 0.5); + _scaleY = _textSize * 0.17 * 4/3 * (((0.8 * (0.46 / sin (0.5 * _angleInterval))) min 1.1) max 0.5); }; // Animate menu scale if (_menuInSelectedPath && (_menuDepth == count _path)) then { - _scale = _scale * (0.3 + 0.7 * (((diag_tickTime - GVAR(expandedTime)) * 8) min 1)); + _scaleX = _scaleX * (0.3 + 0.7 * (((diag_tickTime - GVAR(expandedTime)) * 8) min 1)); + _scaleY = _scaleY * (0.3 + 0.7 * (((diag_tickTime - GVAR(expandedTime)) * 8) min 1)); }; _target = _actionObject; @@ -110,12 +115,12 @@ _angle = _centerAngle - _angleSpan / 2; //BEGIN_COUNTER(children); private ["_offset","_newPos"]; _newPos = if (GVAR(UseListMenu)) then { - [(_sPos select 0) + _scale * 1.10, - (_sPos select 1) + _scale * 0.30 * 4/3 * (_foreachindex - _numChildren/2 + 0.5)]; - } else { - [(_sPos select 0) -_scale * cos _angle, - (_sPos select 1) +_scale * (sin _angle) * 4/3]; - }; + [(_sPos select 0) + _scaleX, + (_sPos select 1) + _scaleY * (_foreachindex - _numChildren/2 + 0.5)]; + } else { + [(_sPos select 0) - _scaleX * (cos _angle), + (_sPos select 1) + _scaleY * (sin _angle)]; + }; //drawLine3D [_pos, _newPos, [1,0,0,0.8]]; //END_COUNTER(children); diff --git a/addons/interact_menu/functions/fnc_renderSelector.sqf b/addons/interact_menu/functions/fnc_renderSelector.sqf index 7d5a3359f7..7ac9559297 100644 --- a/addons/interact_menu/functions/fnc_renderSelector.sqf +++ b/addons/interact_menu/functions/fnc_renderSelector.sqf @@ -15,21 +15,29 @@ EXPLODE_2_PVT(_this,_sPos,_icon); +private ["_displayNum", "_ctrl", "_pos"]; + if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then { _displayNum = [[46, 12] select visibleMap,91919] select (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]); GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]); }; -private "_ctrl"; _ctrl = GVAR(iconCtrls) select GVAR(iconCount); -if (GVAR(UseListMenu)) then { - [_ctrl, GVAR(iconCount), format ["", _icon]] call FUNC(ctrlSetParsedTextCached); - _ctrl ctrlSetPosition [(_sPos select 0)-(0.014*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.05*SafeZoneW, 0.035*SafeZoneW]; +_pos = if (GVAR(UseListMenu)) then { + [_ctrl, GVAR(iconCount), format ["", _icon]] call FUNC(ctrlSetParsedTextCached); + [(_sPos select 0)-(0.014*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.05*SafeZoneW, 0.035*SafeZoneW] } else { - [_ctrl, GVAR(iconCount), format ["", _icon]] call FUNC(ctrlSetParsedTextCached); - _ctrl ctrlSetPosition [(_sPos select 0)-(0.050*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.1*SafeZoneW, 0.035*SafeZoneW]; + [_ctrl, GVAR(iconCount), format ["", _icon]] call FUNC(ctrlSetParsedTextCached); + [(_sPos select 0)-(0.050*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.1*SafeZoneW, 0.035*SafeZoneW] }; -//_ctrl ctrlSetBackgroundColor [1, 0, 0, 0.1]; + GVAR(iconCount) = GVAR(iconCount) + 1; + +if (GVAR(cursorKeepCentered) && {uiNamespace getVariable [QGVAR(cursorMenuOpened),false]}) then { + _pos set [0, ((_pos select 0) - (GVAR(cursorPos) select 0) + 0.5)]; + _pos set [1, ((_pos select 1) - (GVAR(cursorPos) select 1) + 0.5)]; +}; + +_ctrl ctrlSetPosition _pos; _ctrl ctrlCommit 0; diff --git a/addons/interact_menu/functions/fnc_setupTextColors.sqf b/addons/interact_menu/functions/fnc_setupTextColors.sqf index 5df9c589da..e26ef9dad8 100644 --- a/addons/interact_menu/functions/fnc_setupTextColors.sqf +++ b/addons/interact_menu/functions/fnc_setupTextColors.sqf @@ -12,7 +12,7 @@ */ #include "script_component.hpp" -private ["_mixColor", "_rowT", "_rowS", "_menuDepth", "_pathCount", "_menuInSelectedPath", "_color", "_path"]; +private ["_menuDepth", "_mixColor", "_pathCount", "_row", "_shadowColor", "_textColor", "_textSize"]; //Mixes 2 colors (number arrays) and makes a color string "#AARRGGBB" for structured text _mixColor = { @@ -30,23 +30,30 @@ _mixColor = { _return }; -GVAR(colorSelected) = [GVAR(colorTextMin), GVAR(colorTextMax), 1] call _mixColor; -GVAR(colorSelectedShadow) = [GVAR(colorShadowMin), GVAR(colorShadowMax), 1] call _mixColor; -GVAR(colorNotSelectedMatrix) = []; -GVAR(colorShadowNotSelectedMatrix) = []; +_textColor = [GVAR(colorTextMin), GVAR(colorTextMax), 1] call _mixColor; +_shadowColor = [GVAR(colorShadowMin), GVAR(colorShadowMax), 1] call _mixColor; +_textSize = switch (GVAR(textSize)) do { + case (0): {0.4}; + case (1): {0.6}; + case (2): {0.8}; + case (3): {1}; + case (4): {1.2}; +}; +GVAR(colorSelectedSettings) = format ["color='%1' size='%2' shadow='%3' shadowColor='%4' shadowOffset='0.06'", _textColor, _textSize, GVAR(shadowSetting), _shadowColor]; + +GVAR(textSettingsMatrix) = []; for "_pathCount" from 0 to 15 do { - _rowT = []; - _rowS = []; + _row = []; for "_menuDepth" from 0 to 15 do { if (_menuDepth > 0) then { - _rowT pushBack ([GVAR(colorTextMin), GVAR(colorTextMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor); - _rowS pushBack ([GVAR(colorShadowMin), GVAR(colorShadowMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor); + _textColor = [GVAR(colorTextMin), GVAR(colorTextMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor; + _shadowColor = [GVAR(colorShadowMin), GVAR(colorShadowMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor; } else { - _rowT pushBack ([GVAR(colorTextMin), GVAR(colorTextMax), 0] call _mixColor); - _rowS pushBack ([GVAR(colorShadowMin), GVAR(colorShadowMax), 0] call _mixColor); + _textColor = [GVAR(colorTextMin), GVAR(colorTextMax), 0] call _mixColor; + _shadowColor = [GVAR(colorShadowMin), GVAR(colorShadowMax), 0] call _mixColor; }; + _row pushBack format ["color='%1' size='%2' shadow='%3' shadowColor='%4' shadowOffset='0.06'", _textColor, _textSize, GVAR(shadowSetting), _shadowColor]; }; - GVAR(colorNotSelectedMatrix) pushBack _rowT; - GVAR(colorShadowNotSelectedMatrix) pushBack _rowS; + GVAR(textSettingsMatrix) pushBack _row; }; diff --git a/addons/interact_menu/functions/fnc_splitPath.sqf b/addons/interact_menu/functions/fnc_splitPath.sqf index 935e947b30..790ae83466 100644 --- a/addons/interact_menu/functions/fnc_splitPath.sqf +++ b/addons/interact_menu/functions/fnc_splitPath.sqf @@ -13,7 +13,7 @@ */ #include "script_component.hpp" -private ["_parentPath","_actionName"]; +private ["_parentPath","_actionName", "_i"]; _parentPath = []; for [{_i = 0},{_i < (count _this) - 1},{_i = _i + 1}] do { _parentPath pushBack (_this select _i); diff --git a/addons/interact_menu/script_component.hpp b/addons/interact_menu/script_component.hpp index a086b02613..3117065ca2 100644 --- a/addons/interact_menu/script_component.hpp +++ b/addons/interact_menu/script_component.hpp @@ -1,6 +1,8 @@ #define COMPONENT interact_menu #include "\z\ace\addons\main\script_mod.hpp" +// #define DEBUG_MODE_FULL + #ifdef DEBUG_ENABLED_INTERACT_MENU #define DEBUG_MODE_FULL #endif diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 2de2075221..8f60fa6879 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -10,7 +10,8 @@ Zawsze wyświetlaj kursor dla własnej interakcji Toujours afficher le curseur pour les interactions sur soi-même Mindig legyen a saját cselekvés kurzorja látható - Mostra sempre il cursore per le auto interazioni + Mostra sempre il cursore per le interazioni su se stessi + Sempre mostrar cursor para interação pessoal Always display cursor for interaction @@ -18,6 +19,11 @@ Toujours afficher le curseur pour les interactions Mostra sempre il cursore per le interazioni Zawsze wyświetlaj kursor dla interakcji + Показывать курсор (взаимодействие) + Zobrazit kurzor v menu pro interakci + Immer den Cursor für Fremd-Interaktionen anzeigen + Mindig legyen a cselekvés kurzorja látható + Sempre mostrar cursor para interação Display interaction menus as lists @@ -26,7 +32,10 @@ Afficher le menu d'interaction sous forme de liste Mostra il menù di interazione come lista Wyświetlaj menu interakcji jako listę + Zobrazit menu interakce jako seznam Interaktionsmenü in Listen anzeigen + Cselekvő menük listaként való megjelenítése + Mostrar menu de interação como listas Interact Key @@ -38,6 +47,7 @@ Touche d'interaction Cselekvő gomb Tasto interazione + Tecla de Interação Self Interaction Key @@ -48,7 +58,8 @@ Klawisz własnej interakcji Touche d'interaction personnelle Saját cselekvő gomb - Tasto per auto interazioni + Tasto interazione su se stessi + Tecla de Interação Pessoal Self Actions @@ -59,7 +70,8 @@ Własne akcje Interaction personnelle Saját cselekvések - Auto interazioni + Interazioni su se stessi + Ações Pessoais Vehicle Actions @@ -71,30 +83,139 @@ Interaction véhicule Járműves cselekvések Interazioni con veicoli + Ações de Veículos Interaction - Text Max Interakcja - Tekst max - Interaction -Texte Max + Interakce - Text Max + Interaction - Texte Max + Interaktionstextfarbe Max + Interazioni - Testo Massimo + Взаимодействие - Текст Макс. Interacción - Texto al max. + Cselekvés - Szöveg max. + Interação - Max. de Texto Interaction - Text Min Interakcja - Tekst min + Interakce - Text Min Interaction - Texte Min + Interaktionstextfarbe Min + Interazioni - Testo Minimo + Взаимодействие - Текст Мин. Interacción - Texto al min. + Cselekvés - Szöveg min. + Interação - Min. de Texto Interaction - Shadow Max Interakcja - Cień max + Interakce - Stín Max Interaction - Ombre Max + Interaktionstextschatten Max + Interazioni - Ombra Massima + Взаимодействие - Тень Макс. Interacción - Sombras al max. + Cselekvés - Árnyék max. + Interação - Max. de Sombra Interaction - Shadow Min Interakcja - Cień min + Interakce - Stín Min Interaction - Ombre Min + Interaktionstextschatten Min + Interazioni - Ombra Minima + Взаимодействие - Тень Мин. Interacción - Sombras al min. + Cselekvés - Árnyék min. + Interação - Min. de Sombra + + + Keep cursor centered + Garder le curseur au centre + Центрировать курсор + Cursor zentriert halten + Kurzor középen tartása + Utrzymaj kursor wyśrodkowany + Mantener el cursor centrado + Udržuj kurzor na středu + Manter o cursor centralizado + Mantieni il cursore centrato + + + Keeps cursor centered and pans the option menu around. Useful if screen size is limited. + Udržuje kurzor na středu. Užitečné, pokud je velikost obrazovky omezena. + Garde le curseur au milieu et dispose le menu des options autour. Utile si la taille de l'écran est limitée. + Центрирует курсор и двигает само меню опций. Полезно при ограниченном размере экрана. + Hält den Cursor zentriert und verschiebt das Menü beim Bewegen. Nützlich bei kleinen Bildschirmen. + Középen tartja a kurzort, és a menüelemeket mozgatja. Hasznos lehetőség korlátozott képméretnél. + Utrzymuje kursor na środku ekranu, zamiast tego ruch myszą powoduje przesuwanie menu interakcji. Użyteczne w przypadku kiedy rozmiar ekranu jest ograniczony. + Mantiene el cursor centrado y despliega los menús alrededor. Útil si el tamaño de la pantalla es limitado. + Manter o cursor centralizado e mover o menu de opções. Útil caso o tamanho da tela seja limitado. + Mantieni il cursore centrato e sposta il menù intorno. Utile se lo schermo è piccolo. + + + Do action when releasing menu key + Aktion nach Loslassen der Taste ausführen + Wykonuj akcje po puszczeniu klawisza menu + Provést akci při pustění klávesy menu + Action au relachement de touche + Выполнять действие при отпускании кнопки взаимодействия + Realizar la acción al soltar la tecla menu + Execute a ação quando soltar a tecla de menu + Cselekvés végrehajtása a menügomb elengedésekor + Esegui l'azione quando rilasci il tasto menu + + + Interaction Text Size + Velikost textu interakce + Menü-Schriftgröße + Taille du texte d'interaction + Размер текста (меню взаимодействия) + Tamaño del texto de interacción + Rozmiar tekstu interakcji + Tamanho do texto de interação + Cselekvő szöveg mérete + Dimensione del testo d'interazione + + + Interaction Text Shadow + Stín textu interakce + Menü-Hintergrundschatten + Ombre du texte d'interaction + Тень от текста (меню взаимодействия) + Sombra del texto de interacción + Cień tekstu interakcji + Sombra do texto de interação + Cselekvő szöveg árnyéka + Ombra del testo d'interazione + + + Allows controlling the text's shadow. Outline ignores custom shadow colors. + Umožňuje změnit stíny textu v menu interakce. Barva stínu je u tahu písma ignorována. + Stellt den Hintergrundschatten ein. Die Einstellung 'Kontur' ignoriert die Farbe des Schattens. + Permet de controler l'ombre du texte. Le contour ne prend pas en compte la couleur des ombres. + Дает возможность изменять тень, отбрасываемую текстом. Контур не зависит от выбранного цвета тени. + Permite contolar la sombra del texto. El contorno ignora los colores personalizados de la sombra. + Pozwala kontrolować cień tekstu. Kontury ignorują niestandardowe kolory cienia. + Permite controlar a sombra do texto. Contorno ignora sombras com cores customizadas. + Hozzáférést biztosít a szöveg árnyékának kezeléséhez. A körvonal nem veszi figyelembe az egyedi árnyékszíneket. + Permette di controllare l'ombra del testo. L'impostazione "Contorno" ignora il colore dell'ombra. + + + Outline + Kontura + Kontur + Contour + Контур + Contorno + Kontur + Contorno + Körvonal + Contorno - \ No newline at end of file + diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index f6f39808b9..5548311718 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -42,8 +42,8 @@ class CfgVehicles { icon = PATHTOF(UI\team\team_management_ca.paa); hotkey = "M"; - class ACE_JoinTeamRed { - displayName = "$STR_ACE_Interaction_JoinTeamRed"; + class ACE_AssignTeamRed { + displayName = "$STR_ACE_Interaction_AssignTeamRed"; condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam)); showDisabled = 1; @@ -51,8 +51,8 @@ class CfgVehicles { priority = 2.4; hotkey = "R"; }; - class ACE_JoinTeamGreen { - displayName = "$STR_ACE_Interaction_JoinTeamGreen"; + class ACE_AssignTeamGreen { + displayName = "$STR_ACE_Interaction_AssignTeamGreen"; condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam)); showDisabled = 1; @@ -60,8 +60,8 @@ class CfgVehicles { priority = 2.3; hotkey = "G"; }; - class ACE_JoinTeamBlue { - displayName = "$STR_ACE_Interaction_JoinTeamBlue"; + class ACE_AssignTeamBlue { + displayName = "$STR_ACE_Interaction_AssignTeamBlue"; condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; @@ -69,8 +69,8 @@ class CfgVehicles { priority = 2.2; hotkey = "B"; }; - class ACE_JoinTeamYellow { - displayName = "$STR_ACE_Interaction_JoinTeamYellow"; + class ACE_AssignTeamYellow { + displayName = "$STR_ACE_Interaction_AssignTeamYellow"; condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; @@ -79,9 +79,9 @@ class CfgVehicles { hotkey = "Y"; }; - class ACE_LeaveTeam { + class ACE_UnassignTeam { displayName = "$STR_ACE_Interaction_LeaveTeam"; - condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {assignedTeam _player != 'MAIN'}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {assignedTeam _target != 'MAIN'}); statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -166,7 +166,7 @@ class CfgVehicles { }; class ACE_Weapon { displayName = "$STR_ACE_Interaction_Weapon"; - selection = "weapon"; + position = QUOTE(call FUNC(getWeaponPos)); distance = 1.50; condition = ""; statement = ""; @@ -398,6 +398,12 @@ class CfgVehicles { selection = ""; distance = 10; condition = "true"; + class ACE_Passengers { + displayName = "$STR_ACE_Interaction_Passengers"; + condition = "true"; + statement = ""; + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); + }; }; }; class ACE_SelfActions { @@ -416,6 +422,12 @@ class CfgVehicles { selection = ""; distance = 10; condition = "true"; + class ACE_Passengers { + displayName = "$STR_ACE_Interaction_Passengers"; + condition = "true"; + statement = ""; + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); + }; }; }; class ACE_SelfActions { @@ -436,6 +448,12 @@ class CfgVehicles { selection = ""; distance = 10; condition = "true"; + class ACE_Passengers { + displayName = "$STR_ACE_Interaction_Passengers"; + condition = "true"; + statement = ""; + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); + }; }; }; class ACE_SelfActions { @@ -454,6 +472,12 @@ class CfgVehicles { selection = ""; distance = 10; condition = "true"; + class ACE_Passengers { + displayName = "$STR_ACE_Interaction_Passengers"; + condition = "true"; + statement = ""; + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); + }; }; }; class ACE_SelfActions { @@ -483,6 +507,12 @@ class CfgVehicles { showDisabled = 0; priority = -1; }; + class ACE_Passengers { + displayName = "$STR_ACE_Interaction_Passengers"; + condition = "true"; + statement = ""; + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); + }; }; }; class ACE_SelfActions { @@ -502,6 +532,12 @@ class CfgVehicles { selection = "gunnerview"; distance = 2; condition = "true"; + class ACE_Passengers { + displayName = "$STR_ACE_Interaction_Passengers"; + condition = "true"; + statement = ""; + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); + }; }; }; class ACE_SelfActions { diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf index 98b1cc1523..6417043df2 100644 --- a/addons/interaction/XEH_postInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -22,7 +22,7 @@ GVAR(isOpeningDoor) = false; // Add keybinds -["ACE3", QGVAR(openDoor), localize "STR_ACE_Interaction_OpenDoor", +["ACE3 Common", QGVAR(openDoor), localize "STR_ACE_Interaction_OpenDoor", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -42,7 +42,7 @@ GVAR(isOpeningDoor) = false; [57, [false, true, false]], false] call cba_fnc_addKeybind; //Key CTRL+Space -["ACE3", QGVAR(tapShoulder), localize "STR_ACE_Interaction_TapShoulder", +["ACE3 Common", QGVAR(tapShoulder), localize "STR_ACE_Interaction_TapShoulder", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -56,7 +56,7 @@ GVAR(isOpeningDoor) = false; {false}, [20, [true, false, false]], false] call cba_fnc_addKeybind; -["ACE3", QGVAR(modifierKey), localize "STR_ACE_Interaction_ModifierKey", +["ACE3 Common", QGVAR(modifierKey), localize "STR_ACE_Interaction_ModifierKey", { // Conditions: canInteract //if !([ACE_player, objNull, ["isNotDragging"]] call EFUNC(common,canInteractWith)) exitWith {false}; // not needed diff --git a/addons/interaction/XEH_preInit.sqf b/addons/interaction/XEH_preInit.sqf index 34c225c8f0..c2534b44b9 100644 --- a/addons/interaction/XEH_preInit.sqf +++ b/addons/interaction/XEH_preInit.sqf @@ -16,6 +16,7 @@ PREP(getDoor); PREP(getDoorAnimations); PREP(getDown); PREP(getSelectedButton); +PREP(getWeaponPos); PREP(hideMenu); PREP(hideMouseHint); PREP(isInRange); diff --git a/addons/interaction/functions/fnc_getWeaponPos.sqf b/addons/interaction/functions/fnc_getWeaponPos.sqf new file mode 100644 index 0000000000..477e74f9bf --- /dev/null +++ b/addons/interaction/functions/fnc_getWeaponPos.sqf @@ -0,0 +1,21 @@ +/* + * Author: esteldunedain + * Return a suitable position for the action point for the current weapon + * + * Argument: + * None + * + * Return value: + * Children actions + * + * Public: No + */ +#include "script_component.hpp" +// IGNORE_PRIVATE_WARNING(_target); + +private ["_weaponDir","_refSystem"]; + +_weaponDir = _target weaponDirection currentWeapon _target; +_refSystem = _weaponDir call EFUNC(common,createOrthonormalReference); + +(_target selectionPosition "righthand") vectorAdd ((_refSystem select 2) vectorMultiply 0.1); diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 38902f80cf..32a901507b 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -11,6 +11,7 @@ Взаимодействия Cselekvések Interazioni + Interaçãoes Torso @@ -22,6 +23,7 @@ Торс Testtörzs Torso + Torso Head @@ -33,6 +35,7 @@ Голова Fej Testa + Cabeça Left Arm @@ -44,6 +47,7 @@ Левая рука Bal kar Braccio sinistro + Braço Esquerdo Right Arm @@ -55,6 +59,7 @@ Правая рука Jobb kar Braccio destro + Braço Direito Left Leg @@ -66,6 +71,7 @@ Левая нога Bal láb Gamba sinistra + Perna Esquerda Right Leg @@ -77,6 +83,7 @@ Правая нога Jobb láb Gamba destra + Perna Direita Weapon @@ -88,6 +95,7 @@ Оружие Fegyver Arma + Arma Interaction Menu @@ -104,14 +112,14 @@ Interaction Menu (Self) Interaktionsmenü (Selbst) - Menú de interacción (Propia) + Menú de interacción (Propio) Menu interakcji (własne) Menu interakce (vlastní) Menu d'interaction (Perso) Меню взаимодействия (с собой) Cselekvő menü (saját) Menu de Interação (Individual) - Menù interazione (Individuale) + Menù interazione (individuale) Open / Close Door @@ -255,7 +263,7 @@ Жесты Kézjelek Gestos - Segnali gestuali + Gesti Attack @@ -435,7 +443,7 @@ Někdo tě poklepal na PRAVÉ rameno Вас похлопали по ПРАВОМУ плечу Você foi tocado no ombro - Ti è stato dato un colpetto sulla spalla + Ti è stato dato un colpetto sulla spalla destra You were tapped on the LEFT shoulder. @@ -447,7 +455,7 @@ Někdo tě poklepal na LEVÉ rameno Вас похлопали по ЛЕВОМУ плечу Você foi tocado no ombro. - Ti è stato dato un colpetto sulla spalla + Ti è stato dato un colpetto sulla spalla sinistra Cancel @@ -495,19 +503,19 @@ A földre! Ложись! Abaixe-se! - A Terra! + A terra! - Team<br/>Management - Team<br/>Management - Gestión<br/>de equipo - Gestion<br/>d'équipe - Zarządzanie<br/>oddziałem - Správa<br/>týmu - Управление<br/>группой - Gerenciamento<br/>de Equipe - Organizzazione<br/>Squadra - Csapat<br/>kezelése + Team Management + Team Management + Gestión de equipo + Gestion d'équipe + Zarządzanie oddziałem + Správa týmu + Управление группой + Gerenciamento de Equipe + Organizzazione Squadra + Csapat kezelése Red @@ -552,62 +560,110 @@ Jaune Żółty Žlutý - Желтый + Жёлтый Amarela Giallo Sárga + + Assign Red + Rot zuweisen + Asignar a rojo + Przydziel do czerwonych + Atribuir Vermelho + Hozzávonás a Piroshoz + Přiřadit k červeným + Назначить в Красную группу + Assigner à rouge + Assegna al team rosso + + + Assign Green + Grün zuweisen + Asignar a verde + Przydziel do zielonych + Atribuir Verde + Hozzávonás a Zöldhöz + Přiřadit k zeleným + Назначить в Зеленую группу + Assigner à vert + Assegna al team verde + + + Assign Blue + Blau zuweisen + Asignar a azul + Przydziel do niebieskich + Atribuir Azul + Hozzávonás a Kékhez + Přiřadit k modrým + Назначить в Синюю группу + Assigner à bleu + Assegna al team blu + + + Assign Yellow + Gelb zuweisen + Asignar a amarillo + Przydziel do żółtych + Atribuir Amarelo + Hozzávonás a Sárgához + Přiřadit ke žlutým + Назначить в Желтую группу + Assigner à jaune + Assegna al team giallo + - Join Team<br/>Red - Team Rot<br/>beitreten - Unirse al<br/>equipo rojo - Rejoindre<br/>Rouge - Dołącz do drużyny<br/>czerwonej - Připojit do<br/>Červeného týmu - Присоединиться<br/>к красной группе - Unir-se à<br/>Equipe Vermelha - Entra nella<br/>Squadra Rossa - Csatlakozás a<br/>piros csapathoz + Join Red + Rot beitreten + Unirse a rojo + Dołącz do czerwonych + Entrar em Vermelho + Belépés a Pirosba + Připojit k červeným + Присоединиться к Красной группе + Rejoindre rouge + Unirsi al team rosso - Join Team<br/>Green - Team Grün<br/>beitreten - Unirse al<br/>equipo verde - Rejoindre<br/>Vert - Dołącz do<br/>drużyny zielonej - Připojit do<br/>Zeleného týmu - Присоединиться<br/>к зеленой группе - Unir-se à<br/>Equipe Verde - Entra nella<br/>Squadra Verde - Csatlakozás a<br/>zöld csapathoz + Join Green + Grün beitreten + Unirse a verde + Dołącz do zielonych + Entrar em Verde + Belépés a Zöldbe + Připojit k zeleným + Присоединиться к Зеленой группе + Rejoindre vert + Unirsi al team verde - Join Team<br/>Blue - Team Blau<br/>beitreten - Unirse al<br/>equipo azul - Rejoindre<br/>Bleu - Dołącz do<br/>drużyny niebieskiej - Připojit do<br/>Modrého týmu - Присоединиться<br/>к синей группе - Unir-se à<br/>Equipe Azul - Entra nella<br/>Squadra Blu - Csatlakozás a<br/>kék csapathoz + Join Blue + Blau beitreten + Unirse a azul + Dołącz do niebieskich + Entrar em Azul + Belépés a Kékbe + Připojit k modrým + Присоединиться к Синей группе + Rejoindre bleu + Unirsi al team blu - Join Team<br/>Yellow - Team Gelb<br/>beitreten - Unirse al<br/>equipo amarillo - Rejoindre<br/>Jaune - Dołącz do<br/>drużyny żółtej - Připojit do<br/>Žlutého týmu - Присоединиться<br/>к желтой группе - Unir-se à<br/>Equipe Amarela - Entra nella<br/>Squadra Gialla - Csatlakozás a<br/>sárga csapathoz + Join Yellow + Gelb beitreten + Unirse a amarillo + Dołącz do żółtych + Entrar em Amarelo + Belépés a Sárgába + Připojit ke žlutým + Присоединиться к Жёлтой группе + Rejoindre jaune + Unirsi al team giallo You joined Team %1 - Du bist Team %1 beigetreten + Du bist Gruppe %1 beigetreten Te has unido al equipo %1 Tu as rejoint l'équipe %1 Dołączyłeś do drużyny %1 @@ -619,7 +675,7 @@ Leave Team - Team verlassen + Gruppe verlassen Dejar equipo Quitter l'équipe Opuść drużynę @@ -631,7 +687,7 @@ You left the Team - Du hast das Team verlassen + Du hast die Gruppe verlassen Has dejado el equipo Tu as quitté l'équipe Opuściłeś drużynę @@ -673,7 +729,7 @@ Tecla modificadora Клавиша-модификатор Tecla Modificadora - Modifica tasto + Tasto modifica Módosító billentyű Modifikátor @@ -687,7 +743,7 @@ Hatótávolságon kívül Poza zasięgiem Mimo dosah - Non in raggio + Fuori limite Equipment @@ -699,6 +755,7 @@ Felszerelés Снаряжение Equipaggiamento + Equipamento Push @@ -709,7 +766,8 @@ Odstrčit Tolás Толкать - Spingi + Empurrar + Spingere Interact @@ -720,11 +778,12 @@ Interakcja Interactuar Cselekvés - Interagisci + Interagire + Interagir Passengers - Passagiere + Insassen Pasajeros Пассажиры Pasažéři @@ -732,6 +791,7 @@ Passagers Utasok Passeggeri + Passageiros diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index da132cc3f1..6ad5ec0408 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -11,6 +11,7 @@ Agrandir la taille d'affichage de l'inventaire Legyen a felszerelés menüje nagyobb Ingrandisci il menù inventario + Aumentar o Tamanho da Tela do Inventário Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. @@ -22,6 +23,7 @@ L'inventaire est normalement affiché en fonction de la taille de l'UI. Cette option permet d'agrandir l'affichage de l'inventaire, mais n'a aucun effet sur la taille des polices permettant d'afficher plus de ligne Alaphelyzetben a kezelőfelület mérete skálázza a felszerelési menüt. Ez az opció engedélyezi a menü felskálázását, de megtartja a betűméreteket, így növelve a láthatóságot. Normalmente il menù inventario è scalato in base alle dimensioni interfaccia. Questa opzione di permette di ingrandirlo ulteriormente ma senza aumentare la dimensione del testo. + Normalmente o tamanho da tela do inventário é ditada pelo tamanho da UI. Isso permite aumentar o tamanho da tela de inventário, mas não aumenta o tamanho da fonte, permitindo que mais linhas sejam visualizadas. diff --git a/addons/javelin/CfgVehicles.hpp b/addons/javelin/CfgVehicles.hpp index 5ea7e3327c..48781036ad 100644 --- a/addons/javelin/CfgVehicles.hpp +++ b/addons/javelin/CfgVehicles.hpp @@ -9,12 +9,48 @@ class CfgVehicles { class MainTurret; }; }; + class AT_01_base_F: StaticMGWeapon {}; - - class AT_01_base_F: StaticMGWeapon { + class B_static_AT_F: AT_01_base_F { class Turrets : Turrets { class MainTurret : MainTurret { - weapons[] = { "missiles_titan_static_at" }; + weapons[] = { QGVAR(Titan_Static) }; + magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"}; + + turretInfoType = "ACE_RscOptics_javelin"; + gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d); + opticsZoomMin = 0.08333; + opticsZoomMax = 0.04167; + opticsZoomInit = 0.08333; + opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1"}; + opticsFlare = 0; + discretefov[] = {0.08333,0.04167}; + discreteInitIndex = 0; + }; + }; + }; + class O_static_AT_F: AT_01_base_F { + class Turrets : Turrets { + class MainTurret : MainTurret { + weapons[] = { QGVAR(Titan_Static) }; + magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"}; + + turretInfoType = "ACE_RscOptics_javelin"; + gunnerOpticsModel = PATHTOF(data\reticle_titan.p3d); + opticsZoomMin = 0.08333; + opticsZoomMax = 0.04167; + opticsZoomInit = 0.08333; + opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1"}; + opticsFlare = 0; + discretefov[] = {0.08333,0.04167}; + discreteInitIndex = 0; + }; + }; + }; + class I_static_AT_F: AT_01_base_F { + class Turrets : Turrets { + class MainTurret : MainTurret { + weapons[] = { QGVAR(Titan_Static) }; magazines[] = {"1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles","1Rnd_GAT_missiles"}; turretInfoType = "ACE_RscOptics_javelin"; diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp index 1392cd1a56..1bbf713b3b 100644 --- a/addons/javelin/CfgWeapons.hpp +++ b/addons/javelin/CfgWeapons.hpp @@ -11,7 +11,9 @@ class CfgWeapons { }; - class missiles_titan_at : missiles_titan { + class missiles_titan_at : missiles_titan { }; + class GVAR(Titan_Static) : missiles_titan_at { + GVAR(enabled) = 1; weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); @@ -20,18 +22,50 @@ class CfgWeapons { lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; }; - class missiles_titan_static_at : missiles_titan_at { }; // @TODO: AA by default, motherfuckers class launch_Titan_base : Launcher_Base_F {}; - class launch_Titan_short_base : launch_Titan_base { + class launch_Titan_short_base : launch_Titan_base { }; + + class launch_B_Titan_short_F: launch_Titan_short_base { + GVAR(enabled) = 1; + weaponInfoType = "ACE_RscOptics_javelin"; + modelOptics = PATHTOF(data\reticle_titan.p3d); + + canLock = 0; + + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + }; + class launch_I_Titan_short_F: launch_Titan_short_base { + GVAR(enabled) = 1; + weaponInfoType = "ACE_RscOptics_javelin"; + modelOptics = PATHTOF(data\reticle_titan.p3d); + + canLock = 0; + + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + }; + class launch_O_Titan_short_F: launch_Titan_short_base { + GVAR(enabled) = 1; weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = PATHTOF(data\reticle_titan.p3d); canLock = 0; + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + }; + class launch_Titan_short_F: launch_Titan_short_base { + GVAR(enabled) = 1; + weaponInfoType = "ACE_RscOptics_javelin"; + modelOptics = PATHTOF(data\reticle_titan.p3d); + + canLock = 0; + lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; }; diff --git a/addons/javelin/functions/fnc_onFired.sqf b/addons/javelin/functions/fnc_onFired.sqf index 8c6590f5df..fa947bfdd5 100644 --- a/addons/javelin/functions/fnc_onFired.sqf +++ b/addons/javelin/functions/fnc_onFired.sqf @@ -6,10 +6,8 @@ PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); // Bail on not missile if( _shooter != ACE_player) exitWith { false }; -if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_short_base"] call EFUNC(common,inheritsFrom)) - && - { ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "missiles_titan_at"] call EFUNC(common,inheritsFrom)) } -) exitWith { }; +_configs = configProperties [configFile >> "CfgWeapons" >> _weapon, QUOTE(configName _x == QUOTE(QGVAR(enabled))), false]; +if (((count _configs) < 1) || {(getNumber (_configs select 0)) != 1}) exitWith {}; _pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil]; if(!isNil "_pfh_handle") then { diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 8fa96c036a..039484d1af 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -35,10 +35,8 @@ _soundTime = _args select 4; _randomLockInterval = _args select 5; _fireDisabledEH = _args select 6; -if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_short_base"] call EFUNC(common,inheritsFrom)) - && - { ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "missiles_titan_at"] call EFUNC(common,inheritsFrom)) } - ) exitWith { +_configs = configProperties [configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)), QUOTE(configName _x == QUOTE(QGVAR(enabled))), false]; +if (((count _configs) < 1) || {(getNumber (_configs select 0)) != 1}) exitWith { __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; @@ -130,7 +128,7 @@ FUNC(disableFire) = { if(_firedEH < 0 && difficulty > 0) then { _firedEH = [ACE_player, "DefaultAction", {true}, { - _canFire = _this getVariable["ace_missileguidance_target", nil]; + _canFire = (_this select 1) getVariable["ace_missileguidance_target", nil]; if(!isNil "_canFire") exitWith { false }; true }] call EFUNC(common,addActionEventHandler); diff --git a/addons/javelin/initKeybinds.sqf b/addons/javelin/initKeybinds.sqf index ecce40bbf0..2c095b93fc 100644 --- a/addons/javelin/initKeybinds.sqf +++ b/addons/javelin/initKeybinds.sqf @@ -1,9 +1,9 @@ // by commy2 -["ACE3", QGVAR(lockTarget), localize "STR_ACE_JAVELIN_LockTarget", +["ACE3 Weapons", QGVAR(lockTarget), localize "STR_ACE_JAVELIN_LockTarget", { if (GETGVAR(isLockKeyDown,false)) exitWith {false}; - + GVAR(isLockKeyDown) = true; // Statement @@ -14,16 +14,16 @@ { // prevent holding down GVAR(isLockKeyDown) = false; - + // Statement [ACE_player] call FUNC(lockKeyUp); false }, [15, [false, false, false]], false] call cba_fnc_addKeybind; //Tab Key -["ACE3", QGVAR(cycleFireMode), localize "STR_ACE_JAVELIN_CycleFireMode", +["ACE3 Weapons", QGVAR(cycleFireMode), localize "STR_ACE_JAVELIN_CycleFireMode", { false }, -{ +{ [ACE_player] call FUNC(cycleFireMode); false }, diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml index 33abcc1e49..0557968115 100644 --- a/addons/javelin/stringtable.xml +++ b/addons/javelin/stringtable.xml @@ -5,23 +5,25 @@ Lock Target (Hold) Ziel aufschalten Захватить цель (удерживать) - Zamknout cíl(držet) + Zamknout cíl (držet) Namierz cel (przytrzymaj) Verrouiller la cible (maintenir) Célpontra állás (Lenyomva tartott) Aggangia il bersagio Fijar objetivo (Mantener) + Travar Alvo(Segurar) Cycle Fire Mode Wechsle Feuermodus Переключение режимов огня - Cyklování režimů palby + Přepínání režimů palby Przełącz tryb ognia Cycle mode de tir Tüzelési mód váltása Alterna le modalità di fuoco Cambiar modo de disparo + Alterar Modo de Disparo \ No newline at end of file diff --git a/addons/kestrel4500/$PBOPREFIX$ b/addons/kestrel4500/$PBOPREFIX$ new file mode 100644 index 0000000000..15660502ce --- /dev/null +++ b/addons/kestrel4500/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\kestrel4500 \ No newline at end of file diff --git a/addons/kestrel4500/RscTitles.hpp b/addons/kestrel4500/RscTitles.hpp index defb954292..b091a07561 100644 --- a/addons/kestrel4500/RscTitles.hpp +++ b/addons/kestrel4500/RscTitles.hpp @@ -54,6 +54,7 @@ class Kestrel4500_Display name="Kestrel4500_Display"; idd=-1; onLoad="uiNamespace setVariable ['Kestrel4500_Display', (_this select 0)]"; + onUnload=QUOTE(_this call FUNC(onCloseDialog)); movingEnable=1; controlsBackground[]={}; objects[]={}; @@ -217,6 +218,7 @@ class RscTitles { idd=-1; onLoad="with uiNameSpace do { RscKestrel4500 = _this select 0 };"; + onUnload=(_this call FUNC(onCloseDisplay)); movingEnable=0; duration=60; fadeIn="false"; diff --git a/addons/kestrel4500/XEH_postInit.sqf b/addons/kestrel4500/XEH_postInit.sqf index 461ed533db..24a972c326 100644 --- a/addons/kestrel4500/XEH_postInit.sqf +++ b/addons/kestrel4500/XEH_postInit.sqf @@ -22,4 +22,4 @@ GVAR(MeasuredWindSpeed) = 0; GVAR(ImpellerState) = 0; GVAR(Kestrel4500) = false; -GVAR(Overlay) = false; +GVAR(Overlay) = false; \ No newline at end of file diff --git a/addons/kestrel4500/XEH_preInit.sqf b/addons/kestrel4500/XEH_preInit.sqf index d081f485ec..4e29b9bdbf 100644 --- a/addons/kestrel4500/XEH_preInit.sqf +++ b/addons/kestrel4500/XEH_preInit.sqf @@ -3,7 +3,6 @@ ADDON = false; PREP(buttonPressed); -PREP(calculateWindSpeed); PREP(canShow); PREP(collectData); PREP(createKestrelDialog); @@ -13,4 +12,7 @@ PREP(measureWindSpeed); PREP(updateDisplay); PREP(updateImpellerState); +PREP(onCloseDialog); +PREP(onCloseDisplay); + ADDON = true; diff --git a/addons/kestrel4500/functions/fnc_calculateWindSpeed.sqf b/addons/kestrel4500/functions/fnc_calculateWindSpeed.sqf deleted file mode 100644 index 8267f7f729..0000000000 --- a/addons/kestrel4500/functions/fnc_calculateWindSpeed.sqf +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Author: Ruthberg - * - * Calculates the wind speed at a given world position - * - * Arguments: - * 0: _this - world position - * - * Return Value: - * 0: wind speed - m/s - * - * Public: No - */ -#include "script_component.hpp" - -private ["_windSpeed", "_windDir", "_newWindSpeed", "_windSource"]; - -fnc_polar2vect = { - private ["_mag2D"]; - _mag2D = (_this select 0) * cos((_this select 2)); - [_mag2D * sin((_this select 1)), _mag2D * cos((_this select 1)), (_this select 0) * sin((_this select 2))]; -}; - -_windSpeed = vectorMagnitude ACE_wind; -_windDir = (ACE_wind select 0) atan2 (ACE_wind select 1); - -// Terrain effect on wind -if (_windSpeed > 0.05) then { - _newWindSpeed = 0; - { - _windSource = [100, _windDir + 180, _x] call fnc_polar2vect; - if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 9) * _windSpeed; - }; - _windSource = [100, _windDir + 180 + _x, 0] call fnc_polar2vect; - if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 9) * _windSpeed; - }; - _windSource = [100, _windDir + 180 - _x, 0] call fnc_polar2vect; - if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 9) * _windSpeed; - }; - } forEach [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - _windSpeed = _newWindSpeed; -}; - -// Obstacle effect on wind -if (_windSpeed > 0.05) then { - _newWindSpeed = 0; - { - _windSource = [20, _windDir + 180, _x] call fnc_polar2vect; - if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 2) * _windSpeed; - }; - _windSource = [20, _windDir + 180 + _x, 0] call fnc_polar2vect; - if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 2) * _windSpeed; - }; - _windSource = [20, _windDir + 180 - _x, 0] call fnc_polar2vect; - if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith { - _newWindSpeed = cos(_x * 2) * _windSpeed; - }; - } forEach [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]; - _windSpeed = _newWindSpeed; -}; -_windSpeed = 0 max _windSpeed; - -_windSpeed diff --git a/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf b/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf index f9cd6cf04a..289d0825fc 100644 --- a/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf +++ b/addons/kestrel4500/functions/fnc_createKestrelDialog.sqf @@ -14,7 +14,7 @@ */ #include "script_component.hpp" -//if (dialog) exitWith { false }; +if (GVAR(Kestrel4500)) exitWith { false }; if (underwater ACE_player) exitWith { false }; if (!("ACE_Kestrel4500" in (uniformItems ACE_player)) && !("ACE_Kestrel4500" in (vestItems ACE_player))) exitWith { false }; diff --git a/addons/kestrel4500/functions/fnc_measureWindSpeed.sqf b/addons/kestrel4500/functions/fnc_measureWindSpeed.sqf index eb718906aa..73b4e228d6 100644 --- a/addons/kestrel4500/functions/fnc_measureWindSpeed.sqf +++ b/addons/kestrel4500/functions/fnc_measureWindSpeed.sqf @@ -19,12 +19,13 @@ private ["_playerDir", "_windSpeed", "_windDir"]; _playerDir = getDir ACE_player; _windSpeed = vectorMagnitude ACE_wind; _windDir = (ACE_wind select 0) atan2 (ACE_wind select 1); - if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { - _windSpeed = (eyePos ACE_player) call EFUNC(advanced_ballistics,calculateWindSpeed); + // With wind gradient + _windSpeed = [eyePos ACE_player, true, true, true] call EFUNC(weather,calculateWindSpeed); _windSpeed = abs(cos(_playerDir - _windDir)) * _windSpeed; } else { - _windSpeed = (eyePos ACE_player) call FUNC(calculateWindSpeed); + // Without wind gradient + _windSpeed = [eyePos ACE_player, false, true, true] call EFUNC(weather,calculateWindSpeed); }; if (_windSpeed > 0.3 || {GVAR(MeasuredWindSpeed) > 0.1 && _windSpeed > 0.125}) then { diff --git a/addons/kestrel4500/functions/fnc_onCloseDialog.sqf b/addons/kestrel4500/functions/fnc_onCloseDialog.sqf new file mode 100644 index 0000000000..a45a9decc3 --- /dev/null +++ b/addons/kestrel4500/functions/fnc_onCloseDialog.sqf @@ -0,0 +1,4 @@ +#include "script_component.hpp" + +uiNamespace setVariable ['Kestrel4500_Display', nil]; +GVAR(Kestrel4500) = false; diff --git a/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf b/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf new file mode 100644 index 0000000000..efb60b322a --- /dev/null +++ b/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf @@ -0,0 +1,4 @@ +#include "script_component.hpp" + +uiNamespace setVariable ['RscKestrel4500', nil]; +GVAR(Overlay) = false; diff --git a/addons/kestrel4500/initKeybinds.sqf b/addons/kestrel4500/initKeybinds.sqf index 585856cbbb..f910bdf552 100644 --- a/addons/kestrel4500/initKeybinds.sqf +++ b/addons/kestrel4500/initKeybinds.sqf @@ -1,7 +1,8 @@ -["ACE3", QGVAR(KestrelDialogKey), localize "STR_ACE_Kestrel4500_KestrelDialogKey", +["ACE3 Equipment", QGVAR(KestrelDialogKey), localize "STR_ACE_Kestrel4500_KestrelDialogKey", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if(GVAR(Kestrel4500)) exitWith { false }; // Statement [] call FUNC(createKestrelDialog); @@ -10,7 +11,7 @@ {false}, [0, [false, false, false]], false, 0] call CBA_fnc_addKeybind; // (empty default key) -["ACE3", QGVAR(DisplayKestrelKey), localize "STR_ACE_Kestrel4500_DisplayKestrelKey", +["ACE3 Equipment", QGVAR(DisplayKestrelKey), localize "STR_ACE_Kestrel4500_DisplayKestrelKey", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/kestrel4500/stringtable.xml b/addons/kestrel4500/stringtable.xml index 2703e34e9f..e584b9120c 100644 --- a/addons/kestrel4500/stringtable.xml +++ b/addons/kestrel4500/stringtable.xml @@ -18,8 +18,12 @@ Anemomentr skrzydełkowy Kestrel 4500 Карманная метеостанция Kestrel 4500NV Station météo portable Kestrel 4500 - Kestrel 4500 Pocket Weather Tracker + Estación meteorológica Kestrel 4500 Kestrel 4500 Taschenwettermessgerät + Kestrel 4500 Indicatore Meteorologico Tascabile + Kestrel 4500 Medidor Balístico Ativo + Kestrel 4500 kézi szél-és időjárásmérő + Příruční meteostanice Kestrel 4500 Open Kestrel 4500 @@ -30,6 +34,8 @@ Accendi Kestrel 4500 Abrir Kestrel 4500 Kestrel 4500 öffnen + Abrir Kestrel 4500 + Otevřít Kestrel 4500 Show Kestrel 4500 @@ -39,6 +45,9 @@ Mostra Kestrel 4500 Mostrar Kestrel 4500 Kestrel 4500 anzeigen + Kestrel 4500 mutatása + Zobrazit Kestrel 4500 + Mostrar Kestrel 4500 Hide Kestrel 4500 @@ -46,8 +55,11 @@ Убрать Kestrel 4500NV Cacher Kestrel 4500 Nascondi Kestrel 4500 - Esconder Kestrel 4500 + Ocultar Kestrel 4500 Kestrel 4500 wegstecken + Kestrel 4500 elrejtése + Skrýt Kestrel 4500 + Ocultar Kestrel 4500 Open Kestrel 4500 @@ -57,6 +69,9 @@ Accendi Kestrel 4500 Abrir Kestrel 4500 Kestrel 4500 öffnen + Kestrel 4500 elővétele + Otevřít Kestrel 4500 + Abrir Kestrel 4500 Show Kestrel 4500 @@ -66,6 +81,9 @@ Mostra Kestrel 4500 Mostrar Kestrel 4500 Kestrel 4500 anzeigen + Kestrel 4500 mutatása + Zobrazit Kestrel 4500 + Mostrar Kestrel 4500 \ No newline at end of file diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index 23eb00c37c..dd3f02a0cc 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -17,4 +17,29 @@ class CfgVehicles { simulation = "LaserTarget"; model = "\A3\Weapons_f\laserTgt.p3d"; }; + + // Vehicle lockable configurations + + class AllVehicles; + class Air: AllVehicles { + class Turrets; + }; + + class Helicopter: Air { + class Turrets { + class MainTurret; + }; + }; + + class Helicopter_Base_F: Helicopter {}; + + class Heli_Attack_01_base_F: Helicopter_Base_F {}; + + class B_Heli_Attack_01_F: Heli_Attack_01_base_F { + class Turrets: Turrets { + class MainTurret: MainTurret { + GVAR(CanLockLaser) = 1; // Enable laser locking selection + }; + }; + }; }; \ No newline at end of file diff --git a/addons/laser/XEH_post_init.sqf b/addons/laser/XEH_post_init.sqf index f868ef9895..a9f0e82be3 100644 --- a/addons/laser/XEH_post_init.sqf +++ b/addons/laser/XEH_post_init.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +#include "initKeybinds.sqf" + ["laser_laserOn", {_this call DFUNC(handleLaserOn)}] call EFUNC(common,addEventHandler); ["laser_laserOff", {_this call DFUNC(handleLaserOff)}] call EFUNC(common,addEventHandler); diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index 2dd6e666eb..20f31d9e5b 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -24,6 +24,10 @@ PREP(laserTargetPFH); GVAR(VanillaLasers) = []; +PREP(unitTurretCanLockLaser); +PREP(keyLaserCodeUp); +PREP(keyLaserCodeDown); + // Laser default variables ACE_DEFAULT_LASER_CODE = 1001; ACE_DEFAULT_LASER_WAVELENGTH = 1550; diff --git a/addons/laser/functions/fnc_keyLaserCodeDown.sqf b/addons/laser/functions/fnc_keyLaserCodeDown.sqf new file mode 100644 index 0000000000..a27b376d59 --- /dev/null +++ b/addons/laser/functions/fnc_keyLaserCodeDown.sqf @@ -0,0 +1,12 @@ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +private["_oldLaserCode", "_laserCode"]; + +_oldLaserCode = ACE_player getVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE]; +if(_oldLaserCode > ACE_DEFAULT_LASER_CODE) then { + _laserCode = _oldLaserCode - 1; + ACE_player setVariable [QGVAR(code), _laserCode, false]; +}; +if(_laserCode != _oldLaserCode) then { + [format ["%1: %2", localize "STR_ACE_laser_laserCode", _laserCode]] call EFUNC(common,displayTextStructured); +}; \ No newline at end of file diff --git a/addons/laser/functions/fnc_keyLaserCodeUp.sqf b/addons/laser/functions/fnc_keyLaserCodeUp.sqf new file mode 100644 index 0000000000..4e8750164c --- /dev/null +++ b/addons/laser/functions/fnc_keyLaserCodeUp.sqf @@ -0,0 +1,10 @@ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +private["_oldLaserCode", "_laserCode"]; + +_oldLaserCode = ACE_player getVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE]; +_laserCode = _oldLaserCode + 1; +ACE_player setVariable [QGVAR(code), _laserCode, false]; +if(_laserCode != _oldLaserCode) then { +[format ["%1: %2", localize "STR_ACE_laser_laserCode", _laserCode]] call EFUNC(common,displayTextStructured); +}; \ No newline at end of file diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf index 77713eb591..346aec837e 100644 --- a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -1,32 +1,32 @@ -/* - * Author: Nou - * Turn a laser designator on. - * - * Arguments: - * 0: Position of seeker (ASL) - * 1: Direction vector (will be normalized) - * 2: Seeker FOV in degrees - * 3: Seeker wavelength sensitivity range, [1550,1550] is common eye safe. - * 4: Seeker laser code. - * - * Return value: - * Array, [Strongest compatible laser spot ASL pos, owner object] Nil array values if nothing found. - */ - -#include "script_component.hpp" - -private ["_pos", "_seekerWavelengths", "_seekerCode", "_spots", "_buckets", "_excludes", "_bucketIndex", "_finalPos", "_owner", "_obj", "_x", "_method"]; -private ["_emitterWavelength", "_laserCode", "_divergence", "_laser", "_laserPos", "_laserDir", "_res", "_bucketPos", "_bucketList", "_c", "_forEachIndex", "_index"]; -private ["_testPos", "_finalBuckets", "_largest", "_largestIndex", "_finalBucket", "_owners", "_avgX", "_avgY", "_avgZ", "_count", "_maxOwner", "_maxOwnerIndex", "_finalOwner"]; -private["_dir", "_seekerCos", "_seekerFov", "_testDotProduct", "_testPoint", "_testPointVector"]; - -_pos = _this select 0; -_dir = vectorNormalized (_this select 1); +/* + * Author: Nou + * Turn a laser designator on. + * + * Arguments: + * 0: Position of seeker (ASL) + * 1: Direction vector (will be normalized) + * 2: Seeker FOV in degrees + * 3: Seeker wavelength sensitivity range, [1550,1550] is common eye safe. + * 4: Seeker laser code. + * + * Return value: + * Array, [Strongest compatible laser spot ASL pos, owner object] Nil array values if nothing found. + */ + +#include "script_component.hpp" + +private ["_pos", "_seekerWavelengths", "_seekerCode", "_spots", "_buckets", "_excludes", "_bucketIndex", "_finalPos", "_owner", "_obj", "_x", "_method"]; +private ["_emitterWavelength", "_laserCode", "_divergence", "_laser", "_laserPos", "_laserDir", "_res", "_bucketPos", "_bucketList", "_c", "_forEachIndex", "_index"]; +private ["_testPos", "_finalBuckets", "_largest", "_largestIndex", "_finalBucket", "_owners", "_avgX", "_avgY", "_avgZ", "_count", "_maxOwner", "_maxOwnerIndex", "_finalOwner"]; +private["_dir", "_seekerCos", "_seekerFov", "_testDotProduct", "_testPoint", "_testPointVector"]; + +_pos = _this select 0; +_dir = vectorNormalized (_this select 1); _seekerFov = _this select 2; _seekerWavelengths = _this select 3; -_seekerCode = _this select 4; - - +_seekerCode = _this select 4; + + _seekerCos = cos _seekerFov; _spots = []; @@ -47,9 +47,9 @@ _finalOwner = nil; _laser = []; if(IS_CODE(_method)) then { _laser = _x call _method; - } else { - if(IS_STRING(_method)) then { - _laser = _x call (missionNamespace getVariable [_method, {}]); + } else { + if(IS_STRING(_method)) then { + _laser = _x call (missionNamespace getVariable [_method, {}]); } else { if(IS_ARRAY(_method)) then { if(count _method == 2) then { @@ -59,18 +59,18 @@ _finalOwner = nil; _laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), (ATLtoASL (_obj modelToWorldVisual (_method select 1))) vectorFromTo (ATLtoASL (_obj modelToWorldVisual (_method select 2)))]; }; }; - }; + }; }; }; _laserPos = _laser select 0; _laserDir = _laser select 1; _res = [_laserPos, _laserDir, _divergence] call FUNC(shootCone); - { - _testPoint = _x select 0; - _testPointVector = vectorNormalized (_testPoint vectorDiff _pos); - _testDotProduct = _dir vectorDotProduct _testPointVector; + { + _testPoint = _x select 0; + _testPointVector = vectorNormalized (_testPoint vectorDiff _pos); + _testDotProduct = _dir vectorDotProduct _testPointVector; if(_testDotProduct > _seekerCos) then { - _spots pushBack [_testPoint, _owner]; + _spots pushBack [_testPoint, _owner]; }; } forEach (_res select 2); }; @@ -128,7 +128,7 @@ if((count _spots) > 0) then { _avgY = 0; _avgZ = 0; { - player sideChat format["x: %1", _x]; + //player sideChat format["x: %1", _x]; _avgX = _avgX + ((_x select 0) select 0); _avgY = _avgY + ((_x select 0) select 1); _avgZ = _avgZ + ((_x select 0) select 2); diff --git a/addons/laser/functions/fnc_unitTurretCanLockLaser.sqf b/addons/laser/functions/fnc_unitTurretCanLockLaser.sqf new file mode 100644 index 0000000000..a82e42400a --- /dev/null +++ b/addons/laser/functions/fnc_unitTurretCanLockLaser.sqf @@ -0,0 +1,21 @@ +/* + * Author: jaynus + * Checks if the turret occupied by the given unit can lock a laser designator and select laser code. + * + * Argument: + * 0: Unit + * + * Return value: + * Has designator? + */ +#include "script_component.hpp" + +EXPLODE_1_PVT(_this,_unit); + +// Get the player turret path +private ["_turret","_config","_turretConfig"]; +_turret = [_unit] call EFUNC(common,getTurretIndex); +_config = configFile >> "CfgVehicles" >> typeOf vehicle _unit; +_turretConfig = [_config, _turret] call EFUNC(common,getTurretConfigPath); + +getNumber (_turretConfig >> QGVAR(CanLockLaser)) > 0 diff --git a/addons/laser/initKeybinds.sqf b/addons/laser/initKeybinds.sqf new file mode 100644 index 0000000000..d367b3553c --- /dev/null +++ b/addons/laser/initKeybinds.sqf @@ -0,0 +1,27 @@ +["ACE3 Equipment", QGVAR(LaserCodeUp), localize "STR_ACE_laser_laserCodeUp", +{ + if( EGVAR(laser_selfdesignate,active) + || + { (currentWeapon ACE_player) == "Laserdesignator" && (call CBA_fnc_getFoV) select 1 > 5 } // If laserdesignator & FOV, we are in scope. + || + { [ACE_player] call FUNC(unitTurretCanLockLaser) } + ) then { + [] call FUNC(keyLaserCodeUp); + }; +}, +{false}, +[16, [false, true, true]], false, 0] call CBA_fnc_addKeybind; // (ALT+CTRL+Q) + +["ACE3 Equipment", QGVAR(LaserCodeDown), localize "STR_ACE_laser_laserCodeDown", +{ + if( EGVAR(laser_selfdesignate,active) + || + { (currentWeapon ACE_player) == "Laserdesignator" && (call CBA_fnc_getFoV) select 1 > 5 } // If laserdesignator & FOV, we are in scope. + || + { [ACE_player] call FUNC(unitTurretCanLockLaser) } + ) then { + [] call FUNC(keyLaserCodeDown); + }; +}, +{false}, +[18, [true, true, true]], false, 0] call CBA_fnc_addKeybind; // (ALT+CTRL+E) diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml new file mode 100644 index 0000000000..8ea28398e0 --- /dev/null +++ b/addons/laser/stringtable.xml @@ -0,0 +1,41 @@ + + + + + Laser Code + Lasercode + Kod lasera + Code laser + Лазерный код + Código do Laser + Lézerkód + Código del láser + Laser kód + Codice laser + + + Laser - Cycle Code Up + Lasercode + + Laser - Następny kod + Laser - Code + + Лазер - увеличить частоту + Laser - Alternar Código para Cima + Lézer - kódciklus növelése + Láser - Aumentar código + Laser - Kód + + Codice laser + + + + Laser - Cycle Code Down + Lasercode - + Laser - Poprzedni kod + Laser - Code - + Лазер - уменьшить частоту + Laser - Alternar Código para Baixo + Lézer - kódciklus csökkentése + Láser - Reducir código + Laser - Kód - + Codice laser - + + + diff --git a/addons/laser_selfdesignate/CfgVehicles.hpp b/addons/laser_selfdesignate/CfgVehicles.hpp index 02d8b32b3d..3233a1e92c 100644 --- a/addons/laser_selfdesignate/CfgVehicles.hpp +++ b/addons/laser_selfdesignate/CfgVehicles.hpp @@ -21,4 +21,29 @@ class CfgVehicles { }; }; }; + + class Plane: Air {}; + class Plane_Base_F: Plane { + class Turrets { + class CopilotTurret; + }; + }; + + /* @TODO: LGB GBU + class Plane_CAS_01_base_F: Plane_Base_F { + class Turrets: Turrets { + class MainTurret: MainTurret { + GVAR(Enabled) = 1; // Enable laser self-designation + }; + }; + }; + + class Plane_CAS_02_base_F: Plane_Base_F { + class Turrets: Turrets { + class MainTurret: MainTurret { + GVAR(Enabled) = 1; // Enable laser self-designation + }; + }; + }; + */ }; diff --git a/addons/laser_selfdesignate/config.cpp b/addons/laser_selfdesignate/config.cpp index 19ec28063b..597500caf6 100644 --- a/addons/laser_selfdesignate/config.cpp +++ b/addons/laser_selfdesignate/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_laser"}; - version = VERSION; + VERSION_CONFIG; }; }; diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index f587763bce..cdd7439200 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -4,24 +4,26 @@ Laser Designator On Lasermarkierer an - Laser Designador encendido + Designador láser encendido ЛЦУ ВКЛ Laserový značkovač zapnut Desygnator laserowy wł. Désignateur laser allumé Lézeres Megjelölő Be Designatore laser acceso + Designador Laser Ligado Laser Designator Off Lasermarkierer aus - Laser Designador apagado + Designador láser apagado ЛЦУ ВЫКЛ Laserový značkovat vypnut Desygnator laserowy wył. Désignateur laser éteint Lézeres Megjelölő Ki Designatore laser spento + Designador Laser Desligado - \ No newline at end of file + diff --git a/addons/laserpointer/CfgWeapons.hpp b/addons/laserpointer/CfgWeapons.hpp index 4f6a61c83a..6223c3a988 100644 --- a/addons/laserpointer/CfgWeapons.hpp +++ b/addons/laserpointer/CfgWeapons.hpp @@ -20,6 +20,8 @@ class CfgWeapons { ACE_nextModeClass = "acc_pointer_IR"; ACE_modeDescription = "$STR_ACE_Laserpointer_Laser"; + ACE_laserpointer = 1; + author = "$STR_ACE_Common_ACETeam"; _generalMacro = "ACE_acc_pointer_red"; scope = 1; @@ -79,6 +81,8 @@ class CfgWeapons { ACE_nextModeClass = "ACE_acc_pointer_green_IR"; ACE_modeDescription = "$STR_ACE_Laserpointer_Laser"; + ACE_laserpointer = 2; + author = "$STR_ACE_Common_ACETeam"; _generalMacro = "ACE_acc_pointer_green"; scope = 2; diff --git a/addons/laserpointer/functions/fnc_onDraw.sqf b/addons/laserpointer/functions/fnc_onDraw.sqf index 0e4ddf981a..c1e955d028 100644 --- a/addons/laserpointer/functions/fnc_onDraw.sqf +++ b/addons/laserpointer/functions/fnc_onDraw.sqf @@ -25,10 +25,17 @@ _isIR = _isIR == 1; default {""}; }; - _laserID = ["ACE_acc_pointer_red", "ACE_acc_pointer_green"] find _laser; + if (_laser != "") then { + _cacheName = format [QGVAR(laser_%1), _laser]; + _laserID = missionNamespace getVariable [_cacheName, -1]; + if (missionNamespace getVariable [_cacheName, -1] == -1) then { + _laserID = getNumber (configFile >> "CfgWeapons" >> _laser >> "ACE_laserpointer"); + missionNamespace setVariable [_cacheName, _laserID]; + }; - if (_laserID > -1 && {_x isFlashlightOn _weapon}) then { - [_x, 50, _laserID == 1 || _isIR] call FUNC(drawLaserpoint); + if (_laserID > 0 && {_x isFlashlightOn _weapon}) then { + [_x, 50, _laserID == 2 || _isIR] call FUNC(drawLaserpoint); + }; }; } forEach GVAR(nearUnits); diff --git a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf b/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf index f996d6b270..423090796f 100644 --- a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf +++ b/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf @@ -29,11 +29,17 @@ _pointer = switch (_weapon) do { if (_pointer == "") exitWith {}; +private "_config"; +_config = configFile >> "CfgWeapons" >> _pointer; + private "_nextPointer"; -_nextPointer = getText (configFile >> "CfgWeapons" >> _pointer >> "ACE_nextModeClass"); +_nextPointer = getText (_config >> "ACE_nextModeClass"); if (_nextPointer == "") exitWith {}; +// disable inheritance for this entry, because addons claim this as a base class for convenience +if !((_config >> "ACE_nextModeClass") in configProperties [_config, "true", false]) exitWith {}; + private ["_description", "_picture"]; _description = getText (configFile >> "CfgWeapons" >> _nextPointer >> "ACE_modeDescription"); diff --git a/addons/laserpointer/initKeybinds.sqf b/addons/laserpointer/initKeybinds.sqf index 04516f0757..e01f3be5fa 100644 --- a/addons/laserpointer/initKeybinds.sqf +++ b/addons/laserpointer/initKeybinds.sqf @@ -1,6 +1,6 @@ // by commy2 -["ACE3", QGVAR(switchLaserLightMode), localize "STR_ACE_Laserpointer_switchLaserLight", +["ACE3 Weapons", QGVAR(switchLaserLightMode), localize "STR_ACE_Laserpointer_switchLaserLight", { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 8fa38e24dd..1a4182bd8e 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -11,6 +11,7 @@ Lézer-pointer (piros) Puntero láser (rojo) Puntatore laser (rosso) + Laser (vermelho) Laser Pointer (green) @@ -22,6 +23,7 @@ Lézer-pointer (zöld) Puntero láser (verde) Puntatore laser (verde) + Laser (verde) Emits visible light. @@ -32,7 +34,8 @@ Wydziela widzialne światło. Látható fényt bocsát ki. Emite luz visible. - Emette luce visibile + Emette luce visibile. + Emite luz visível. <t color='#9cf953'>Use: </t>Turn Laser ON/OFF @@ -43,7 +46,7 @@ <t color='#9cf953'>Użyj: </t>wł./wył. laser <t color='#9cf953'>Uso: </t>Ativar/Desativar laser <t color='#9cf953'>Использовать: </t>ВКЛ/ВЫКЛ лазер - <t color='#9cf953'>Usar: </t>encender/apagar láser + <t color='#9cf953'>Usar: </t>Encender/Apagar láser <t color='#9cf953'>Használat: </t>Lézer BE/KI kapcsolása @@ -52,7 +55,11 @@ Laser Лазер Laser - Laser + Láser + Laser + Lézer + Laser + Laser IR Laser @@ -60,7 +67,11 @@ Laser IR ИК-лазер Laser IR - Laser IR + Láser IR + Laser IR + Infravörös Lézer + IR Laser + Laser IV Switch Laser / IR Laser @@ -69,7 +80,10 @@ Изменить режим Лазер / ИК-лазер Changer Laser / Laser IR Alterna Laser / IR Laser - Cambiar Laser / Laser IR + Cambiar láser / Láser IR + Lézer / Infravörös Lézer váltása + Přepnout Laser / Infračervený Laser + Alternar entre Laser / Laser IV - \ No newline at end of file + diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index 23588586cf..8c0bd56675 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -21,7 +21,7 @@ Potrzebujesz baterii UAV Szükséged van egy UAV akkumulátorra Potřebuješ UAV baterii - Você precisa de uma Bateria para VANT + Você precisa de uma bateria para VANTs Hai bisogno di una Batteria UAV Требуется аккумулятор для БПЛА @@ -57,7 +57,7 @@ Używana do naładowania baterii przenośnego UAV Hordozható UAV-k feltöltéséhez való akkumulátor Používané k dobíjení UAV - Usada para reabastecer VANT + Usada para reabastecer o VANT Usata per ricaricare la Batteria dell'UAV Используется для зарядки переносных БПЛА @@ -74,4 +74,4 @@ Заряжается ... - + \ No newline at end of file diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index 129075f001..b9e4023765 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -10,16 +10,20 @@ Štípací kleště Nożyce do cięcia drutu Drótvágó + Trancia + Cortador de Arame Wirecutter Schneidet Draht. Cortador de cables Позволяют быстро перекусывать сеточные конструкции. - Štípačky + Štípací kleště Służą do cięcia drutu i płotów Pince coupante Drótok, huzalok, és kábelek vágására alkalmas olló. + Trancia da ferro + Cortador de Arame Cut Fence @@ -38,7 +42,7 @@ Zaun / Draht schneiden ... Cortando alambrado / cables ... Przecinanie płotu / drutów ... - Přestřihnout plot / dráty ... + Přestřihávám plot / dráty ... Cisaille l'obstacle ... Cortando Cerca / Arame ... Sto tagliando ... diff --git a/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf b/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf index 4ef69044da..67c5c4630b 100644 --- a/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf +++ b/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf @@ -24,7 +24,8 @@ private ["_newMagFnc", "_time", "_events", "_swapAmmoFnc", "_ammoSwaped", "_lowI PARAMS_3(_fullMagazineCount,_arrayOfAmmoCounts,_isBelt); // Sort Ascending - Don't modify original -_arrayOfAmmoCounts = (+_arrayOfAmmoCounts) call BIS_fnc_sortNum; +_arrayOfAmmoCounts = +_arrayOfAmmoCounts; +_arrayOfAmmoCounts sort true; _newMagFnc = { _time = _time + GVAR(TimePerMagazine); diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index 4bdfecbd78..8c1a0e01dc 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -8,7 +8,7 @@ Réorganiser les chargeurs Przepakuj magazynki Přepáskovat Zásobníky - Ricarica Caricatori + Ricarica caricatori Reorganizar Carregadores Újratárazás Перепаковать магазины @@ -20,7 +20,7 @@ Sélectionner menu des chargeurs Menu wyboru magazynków Zvolit Menu zásobníků - Seleziona Menù di Ricarica + Seleziona menù di ricarica Menu de Seleção de Carregador Fegyvertár menü kiválasztás Меню выбора магазинов @@ -32,7 +32,7 @@ Sélectionner chargeur Wybierz magazynek Zvolit zásobník - Seleziona Caricatore + Seleziona caricatore Selecionar Carregador Tár kiválasztása Выбрать магазин @@ -68,7 +68,7 @@ %1 chargeur(s) plein(s) et %2 cartouche(s) en rab Pełnych magazynków: %1.<br/>Dodatkowych naboi: %2. %1 plný zásobník(y) a %2 munice navíc - %1 caricatore/i pieno e %2 munizioni extra + %1 caricatore(i) pieno e %2 munizioni extra %1 carregador(es) cheio(s) e %2 disparo(s) a mais %1 teljes tár és %2 extra lőszer %1 полных магазина(ов) и %2 патрона(ов) @@ -77,34 +77,37 @@ Repacking Finished Réorganisation terminée Wiederverpacken Fertig - Reembalaje finalizado + Reorganización finalizada Перепаковка завершена Páskování dokončeno Przepakowywanie zakończone Újratárazás befejezve Riempi caricatore + Reorganização Terminada Repacking Interrupted Réorganisation interrompue Umpacken Unterbrochen - Reembalaje interrumpido + Reorganización interrumpida Перепаковка прервана Páskování přerušeno Przepakowywanie przerwane Újratárazás megszakítva Riempimento interrotto + Reorganização Interrompida %1 Full and %2 Partial %1 plein(s) et %2 partiel(s) %1 Vollständigen und %2 Teilweisen - %1 Total y %2 Parcial + %1 Llenos y %2 Incompletos %1 полных и %2 неполных %1 plný a %2 částečně Pełnych: %1.<br/>Częściowo pełnych: %2. %1 teljes és %2 részleges - %1 pieno e %2 parziale + %1 pieno(i) e %2 parziale(i) + %1 Total e %2 Parcial diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index d4b6739918..175e5f63c7 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -82,4 +82,8 @@ #define HASHLIST_SET(hashList, index, value) ([hashList, index, value, __FILE__, __LINE__] call EFUNC(common,hashListSet)) #define HASHLIST_PUSH(hashList, value) ([hashList, value, __FILE__, __LINE__] call EFUNC(common,hashListPush)) +// Time functions for accuracy per frame +#define ACE_tickTime (ACE_time + (diag_tickTime - ACE_diagTime)) + + #include "script_debug.hpp" \ No newline at end of file diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 25a18e8dc2..c4bd23f779 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -6,7 +6,7 @@ #define MAJOR 3 #define MINOR 0 #define PATCHLVL 0 -#define BUILD 1 +#define BUILD 3 #define VERSION MAJOR.MINOR.PATCHLVL.BUILD #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD diff --git a/addons/map/config.cpp b/addons/map/config.cpp index ebd21d14f5..9d75eaa5c8 100644 --- a/addons/map/config.cpp +++ b/addons/map/config.cpp @@ -87,6 +87,22 @@ class RscMapControl { sizeExGrid = 0.032; }; +class RscMap; +class RscDisplayArcadeMap_Layout_2: RscMap { //"Traditional" Editor: + class controlsBackground { + class CA_Map: RscMapControl { + #include "MapTweaks.hpp" + }; + }; +}; +class RscDisplayArcadeMap_Layout_6: RscMap { //"Streamlined" Editor: + class controlsBackground { + class CA_Map: RscMapControl { + #include "MapTweaks.hpp" + }; + }; +}; + // REGULAR MAP class RscDisplayMainMap { // Tweak map styling @@ -154,7 +170,7 @@ class RscDisplayGetReady: RscDisplayMainMap { class controlsBackground { class CA_Map: RscMapControl { onDraw = QUOTE([ctrlParent (_this select 0)] call DFUNC(onDrawMap)); - //#include "MapTweaks.hpp" @todo Shouldn't this apply to briefing too? + #include "MapTweaks.hpp" }; }; // get rid of the "center to player position" - button (as it works even on elite) diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 0c19581779..d9bdcb02c5 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -8,7 +8,7 @@ Narzędzia nawigacyjne Kartenwerkzeug Pomůcky k mapě - Strumenti Cartografici + Strumenti cartografici Ferramentas de Mapa Térképészeti eszközök Инструменты карты @@ -20,7 +20,7 @@ Narzędzia nawigacyjne pozwalają na mierzenie odległości i kątów na mapie. Das Kartenwerkzeug ermöglicht es dir, Distanzen und Winkel zu messen. Pomůcky k mapě slouží k měření vzdáleností a úhlů na mapě. - Gli Strumenti Cartografici ti consentono di misurare distanze ed angoli sulla mappa. + Gli strumenti cartografici ti consentono di misurare distanze ed angoli sulla mappa. As Ferramentas de Mapa permitem que você meça distâncias e ângulos no mapa. A térképészeti eszközökkel távolságokat és szögeket tudsz mérni a térképen. Картографические инструменты позволяют измерять расстояния и углы на карте. @@ -32,7 +32,7 @@ Narzędzia nawigacyjne Kartenwerkzeug Pomůcky k mapě - Strumenti Cartografici + Strumenti cartografici Ferramentas de Mapa Térképészeti eszközök Инструменты карты @@ -142,7 +142,8 @@ Dirección: %1° Irány: %1 Направление: %1° - Direzione : %1° + Direzione: %1° + Direção: %1 diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index 343f4c9d2a..44d64eb1e0 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -11,6 +11,7 @@ Направление: %1° Irány: %1° Direzione: %1° + Direção %1 diff --git a/addons/medical/ACE_Medical_Actions.hpp b/addons/medical/ACE_Medical_Actions.hpp index 70e286f7d8..9052df81da 100644 --- a/addons/medical/ACE_Medical_Actions.hpp +++ b/addons/medical/ACE_Medical_Actions.hpp @@ -3,8 +3,8 @@ class ACE_Head { displayName = "$STR_ACE_Interaction_Head"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation)); + ACTION_CONDITION modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction)); - condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -21,7 +21,7 @@ class ACE_Head { }; // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'head', 'FieldDressing')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'FieldDressing')] call DFUNC(treatment)); @@ -32,47 +32,47 @@ class ACE_Head { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\bandage.paa); }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\bandage.paa); }; class CheckPulse: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckPulse"; + displayName = "$STR_ACE_Medical_Actions_CheckPulse"; condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(treatment)); EXCEPTIONS icon = ""; }; class CheckBloodPressure: CheckPulse { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckBloodPressure"; + displayName = "$STR_ACE_Medical_Actions_CheckBloodPressure"; condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(treatment)); EXCEPTIONS }; class CheckResponse: CheckPulse { - displayName = "$STR_ACE_MEDICAL_CHECK_RESPONSE"; + displayName = "$STR_ACE_Medical_Check_Response"; condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment)); EXCEPTIONS }; class Diagnose: CheckPulse { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Diagnose"; + displayName = "$STR_ACE_Medical_Actions_Diagnose"; condition = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(treatment)); EXCEPTIONS @@ -82,8 +82,8 @@ class ACE_Torso { displayName = "$STR_ACE_Interaction_Torso"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation)); + ACTION_CONDITION modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction)); - condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -100,7 +100,7 @@ class ACE_Torso { icon = PATHTOF(UI\icons\bandage.paa); }; class PlaceInBodyBag { - displayName = "$STR_ACE_MEDICAL_PlaceInBodyBag"; + displayName = "$STR_ACE_Medical_PlaceInBodyBag"; distance = 2.0; condition = QUOTE([ARR_4(_player, _target, 'body', 'BodyBag')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'BodyBag')] call DFUNC(treatment)); @@ -111,7 +111,7 @@ class ACE_Torso { enableInside = 1; }; class TriageCard { - displayName = "$STR_ACE_MEDICAL_ACTIONS_TriageCard"; + displayName = "$STR_ACE_Medical_Actions_TriageCard"; distance = 2.0; condition = "true"; statement = QUOTE([ARR_2(_target, true)] call DFUNC(displayTriageCard)); @@ -125,7 +125,7 @@ class ACE_Torso { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'body', 'FieldDressing')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'FieldDressing')] call DFUNC(treatment)); @@ -137,42 +137,42 @@ class ACE_Torso { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\bandage.paa); }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\bandage.paa); }; class SurgicalKit: fieldDressing { - displayName = "$STR_ACE_MEDICAL_USE_SURGICALKIT"; + displayName = "$STR_ACE_Medical_Use_SurgicalKit"; condition = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\surgicalKit.paa); }; class PersonalAidKit: fieldDressing { - displayName = "$STR_ACE_MEDICAL_USE_AID_KIT"; + displayName = "$STR_ACE_Medical_Use_Aid_Kit"; condition = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(treatment)); EXCEPTIONS icon = ""; }; class CPR: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CPR"; + displayName = "$STR_ACE_Medical_Actions_CPR"; condition = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(treatment)); EXCEPTIONS @@ -183,8 +183,8 @@ class ACE_ArmLeft { displayName = "$STR_ACE_Interaction_ArmLeft"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation)); + ACTION_CONDITION modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction)); - condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -203,7 +203,7 @@ class ACE_ArmLeft { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'FieldDressing')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'FieldDressing')] call DFUNC(treatment)); @@ -214,28 +214,28 @@ class ACE_ArmLeft { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\bandage.paa); }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\bandage.paa); }; class Tourniquet: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Tourniquet"; + displayName = "$STR_ACE_Medical_Actions_Tourniquet"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(treatment)); EXCEPTIONS @@ -263,75 +263,75 @@ class ACE_ArmLeft { icon = PATHTOF(UI\icons\autoInjector.paa); }; class BloodIV: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_1000"; + displayName = "$STR_ACE_Medical_Actions_Blood4_1000"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\iv.paa); }; class BloodIV_500: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_500"; + displayName = "$STR_ACE_Medical_Actions_Blood4_500"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class BloodIV_250: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_250"; + displayName = "$STR_ACE_Medical_Actions_Blood4_250"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_1000"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_500: PlasmaIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_500"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_500"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_250: PlasmaIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_250"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_250"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_1000"; + displayName = "$STR_ACE_Medical_Actions_Saline4_1000"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV_500: SalineIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_500"; + displayName = "$STR_ACE_Medical_Actions_Saline4_500"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV_250: SalineIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_250"; + displayName = "$STR_ACE_Medical_Actions_Saline4_250"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class CheckPulse: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckPulse"; + displayName = "$STR_ACE_Medical_Actions_CheckPulse"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(treatment)); EXCEPTIONS icon = ""; }; class CheckBloodPressure: CheckPulse { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckBloodPressure"; + displayName = "$STR_ACE_Medical_Actions_CheckBloodPressure"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(treatment)); EXCEPTIONS }; class RemoveTourniquet: Tourniquet { - displayName = "$STR_ACE_MEDICAL_ACTIONS_RemoveTourniquet"; + displayName = "$STR_ACE_Medical_Actions_RemoveTourniquet"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(treatment)); EXCEPTIONS @@ -341,8 +341,8 @@ class ACE_ArmRight { displayName = "$STR_ACE_Interaction_ArmRight"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation)); + ACTION_CONDITION modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction)); - condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -361,7 +361,7 @@ class ACE_ArmRight { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'FieldDressing')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'FieldDressing')] call DFUNC(treatment)); @@ -372,26 +372,26 @@ class ACE_ArmRight { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(treatment)); EXCEPTIONS }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(treatment)); EXCEPTIONS }; class Tourniquet: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Tourniquet"; + displayName = "$STR_ACE_Medical_Actions_Tourniquet"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(treatment)); EXCEPTIONS @@ -417,75 +417,75 @@ class ACE_ArmRight { EXCEPTIONS }; class BloodIV: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_1000"; + displayName = "$STR_ACE_Medical_Actions_Blood4_1000"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\iv.paa); }; class BloodIV_500: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_500"; + displayName = "$STR_ACE_Medical_Actions_Blood4_500"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class BloodIV_250: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_250"; + displayName = "$STR_ACE_Medical_Actions_Blood4_250"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_1000"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_500: PlasmaIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_500"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_500"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_250: PlasmaIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_250"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_250"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_1000"; + displayName = "$STR_ACE_Medical_Actions_Saline4_1000"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV_500: SalineIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_500"; + displayName = "$STR_ACE_Medical_Actions_Saline4_500"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV_250: SalineIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_250"; + displayName = "$STR_ACE_Medical_Actions_Saline4_250"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class CheckPulse: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckPulse"; + displayName = "$STR_ACE_Medical_Actions_CheckPulse"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(treatment)); EXCEPTIONS icon = ""; }; class CheckBloodPressure: CheckPulse { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckBloodPressure"; + displayName = "$STR_ACE_Medical_Actions_CheckBloodPressure"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(treatment)); EXCEPTIONS }; class RemoveTourniquet: Tourniquet { - displayName = "$STR_ACE_MEDICAL_ACTIONS_RemoveTourniquet"; + displayName = "$STR_ACE_Medical_Actions_RemoveTourniquet"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(treatment)); EXCEPTIONS @@ -496,8 +496,8 @@ class ACE_LegLeft { displayName = "$STR_ACE_Interaction_LegLeft"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation)); + ACTION_CONDITION modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction)); - condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -517,7 +517,7 @@ class ACE_LegLeft { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'FieldDressing')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'FieldDressing')] call DFUNC(treatment)); @@ -528,26 +528,26 @@ class ACE_LegLeft { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(treatment)); EXCEPTIONS }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(treatment)); EXCEPTIONS }; class Tourniquet: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Tourniquet"; + displayName = "$STR_ACE_Medical_Actions_Tourniquet"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(treatment)); EXCEPTIONS @@ -574,62 +574,62 @@ class ACE_LegLeft { EXCEPTIONS }; class BloodIV: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_1000"; + displayName = "$STR_ACE_Medical_Actions_Blood4_1000"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\iv.paa); }; class BloodIV_500: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_500"; + displayName = "$STR_ACE_Medical_Actions_Blood4_500"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class BloodIV_250: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_250"; + displayName = "$STR_ACE_Medical_Actions_Blood4_250"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_1000"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_500: PlasmaIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_500"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_500"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_250: PlasmaIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_250"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_250"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_1000"; + displayName = "$STR_ACE_Medical_Actions_Saline4_1000"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV_500: SalineIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_500"; + displayName = "$STR_ACE_Medical_Actions_Saline4_500"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV_250: SalineIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_250"; + displayName = "$STR_ACE_Medical_Actions_Saline4_250"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class RemoveTourniquet: Tourniquet { - displayName = "$STR_ACE_MEDICAL_ACTIONS_RemoveTourniquet"; + displayName = "$STR_ACE_Medical_Actions_RemoveTourniquet"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(treatment)); EXCEPTIONS @@ -639,8 +639,8 @@ class ACE_LegRight { displayName = "$STR_ACE_Interaction_LegRight"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation)); + ACTION_CONDITION modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction)); - condition = "true"; EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -660,7 +660,7 @@ class ACE_LegRight { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'FieldDressing')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'FieldDressing')] call DFUNC(treatment)); @@ -671,26 +671,26 @@ class ACE_LegRight { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(treatment)); EXCEPTIONS }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(treatment)); EXCEPTIONS }; class Tourniquet: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Tourniquet"; + displayName = "$STR_ACE_Medical_Actions_Tourniquet"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(treatment)); EXCEPTIONS @@ -716,62 +716,62 @@ class ACE_LegRight { EXCEPTIONS }; class BloodIV: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_1000"; + displayName = "$STR_ACE_Medical_Actions_Blood4_1000"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\iv.paa); }; class BloodIV_500: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_500"; + displayName = "$STR_ACE_Medical_Actions_Blood4_500"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class BloodIV_250: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Blood4_250"; + displayName = "$STR_ACE_Medical_Actions_Blood4_250"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_1000"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_1000"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_500: PlasmaIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_500"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_500"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class PlasmaIV_250: PlasmaIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Plasma4_250"; + displayName = "$STR_ACE_Medical_Actions_Plasma4_250"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV: BloodIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_1000"; + displayName = "$STR_ACE_Medical_Actions_Saline4_1000"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV_500: SalineIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_500"; + displayName = "$STR_ACE_Medical_Actions_Saline4_500"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_500')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_500')] call DFUNC(treatment)); EXCEPTIONS }; class SalineIV_250: SalineIV { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Saline4_250"; + displayName = "$STR_ACE_Medical_Actions_Saline4_250"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_250')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_250')] call DFUNC(treatment)); EXCEPTIONS }; class RemoveTourniquet: Tourniquet { - displayName = "$STR_ACE_MEDICAL_ACTIONS_RemoveTourniquet"; + displayName = "$STR_ACE_Medical_Actions_RemoveTourniquet"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(treatment)); EXCEPTIONS diff --git a/addons/medical/ACE_Medical_SelfActions.hpp b/addons/medical/ACE_Medical_SelfActions.hpp index add07c8262..5b98448664 100644 --- a/addons/medical/ACE_Medical_SelfActions.hpp +++ b/addons/medical/ACE_Medical_SelfActions.hpp @@ -1,5 +1,5 @@ class Medical { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Medical"; + displayName = "$STR_ACE_Medical_Actions_Medical"; runOnHover = 1; hotkey = "M"; exceptions[] = {"isNotInside"}; @@ -29,7 +29,7 @@ class Medical { }; // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'head', 'FieldDressing')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; @@ -40,35 +40,35 @@ class Medical { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\bandage.paa); }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\bandage.paa); }; class CheckPulse: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckPulse"; + displayName = "$STR_ACE_Medical_Actions_CheckPulse"; condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(treatment)); icon = ""; }; class CheckBloodPressure: CheckPulse { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckBloodPressure"; + displayName = "$STR_ACE_Medical_Actions_CheckBloodPressure"; condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(treatment)); @@ -100,7 +100,7 @@ class Medical { }; class TriageCard { - displayName = "$STR_ACE_MEDICAL_ACTIONS_TriageCard"; + displayName = "$STR_ACE_Medical_Actions_TriageCard"; distance = 2.0; condition = "true"; exceptions[] = {"isNotInside"}; @@ -113,7 +113,7 @@ class Medical { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'body', 'FieldDressing')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; @@ -124,21 +124,21 @@ class Medical { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\bandage.paa); }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(treatment)); @@ -168,7 +168,7 @@ class Medical { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'FieldDressing')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; @@ -179,28 +179,28 @@ class Medical { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\bandage.paa); }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\bandage.paa); }; class Tourniquet: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Tourniquet"; + displayName = "$STR_ACE_Medical_Actions_Tourniquet"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(treatment)); @@ -228,20 +228,20 @@ class Medical { icon = PATHTOF(UI\icons\autoInjector.paa); }; class CheckPulse: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckPulse"; + displayName = "$STR_ACE_Medical_Actions_CheckPulse"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(treatment)); icon = ""; }; class CheckBloodPressure: CheckPulse { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckBloodPressure"; + displayName = "$STR_ACE_Medical_Actions_CheckBloodPressure"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(treatment)); }; class RemoveTourniquet: Tourniquet { - displayName = "$STR_ACE_MEDICAL_ACTIONS_RemoveTourniquet"; + displayName = "$STR_ACE_Medical_Actions_RemoveTourniquet"; condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(treatment)); @@ -270,7 +270,7 @@ class Medical { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'FieldDressing')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; @@ -281,26 +281,26 @@ class Medical { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(treatment)); }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(treatment)); }; class Tourniquet: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Tourniquet"; + displayName = "$STR_ACE_Medical_Actions_Tourniquet"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(treatment)); @@ -326,20 +326,20 @@ class Medical { statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Epinephrine')] call DFUNC(treatment)); }; class CheckPulse: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckPulse"; + displayName = "$STR_ACE_Medical_Actions_CheckPulse"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(treatment)); icon = ""; }; class CheckBloodPressure: CheckPulse { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CheckBloodPressure"; + displayName = "$STR_ACE_Medical_Actions_CheckBloodPressure"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(treatment)); }; class RemoveTourniquet: Tourniquet { - displayName = "$STR_ACE_MEDICAL_ACTIONS_RemoveTourniquet"; + displayName = "$STR_ACE_Medical_Actions_RemoveTourniquet"; condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(treatment)); @@ -369,7 +369,7 @@ class Medical { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'FieldDressing')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; @@ -380,26 +380,26 @@ class Medical { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(treatment)); }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(treatment)); }; class Tourniquet: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Tourniquet"; + displayName = "$STR_ACE_Medical_Actions_Tourniquet"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(treatment)); @@ -426,7 +426,7 @@ class Medical { statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Epinephrine')] call DFUNC(treatment)); }; class RemoveTourniquet: Tourniquet { - displayName = "$STR_ACE_MEDICAL_ACTIONS_RemoveTourniquet"; + displayName = "$STR_ACE_Medical_Actions_RemoveTourniquet"; condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(treatment)); @@ -456,7 +456,7 @@ class Medical { // Advanced medical class FieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_FieldDressing"; + displayName = "$STR_ACE_Medical_Actions_FieldDressing"; distance = 5.0; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'FieldDressing')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; @@ -467,26 +467,26 @@ class Medical { icon = PATHTOF(UI\icons\bandage.paa); }; class PackingBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_PackingBandage"; + displayName = "$STR_ACE_Medical_Actions_PackingBandage"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(treatment)); icon = PATHTOF(UI\icons\packingBandage.paa); }; class ElasticBandage: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_ElasticBandage"; + displayName = "$STR_ACE_Medical_Actions_ElasticBandage"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(treatment)); }; class QuikClot: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_QuikClot"; + displayName = "$STR_ACE_Medical_Actions_QuikClot"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(treatment)); }; class Tourniquet: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Tourniquet"; + displayName = "$STR_ACE_Medical_Actions_Tourniquet"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(treatment)); @@ -512,7 +512,7 @@ class Medical { statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Epinephrine')] call DFUNC(treatment)); }; class RemoveTourniquet: Tourniquet { - displayName = "$STR_ACE_MEDICAL_ACTIONS_RemoveTourniquet"; + displayName = "$STR_ACE_Medical_Actions_RemoveTourniquet"; condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(canTreatCached)); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(treatment)); diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 85bcab9616..9848410c8c 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -20,8 +20,8 @@ class ACE_Medical_Actions { animationPatient = ""; animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback"; animationPatientUnconsciousExcludeOn[] = {"ainjppnemstpsnonwrfldnon"}; - animationCaller = "AinvPknlMstpSlayWnonDnon_medic"; - animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; + animationCaller = "AinvPknlMstpSlayWrflDnon_medicOther"; + animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medicOther"; animationCallerSelf = "AinvPknlMstpSlayW[wpn]Dnon_medic"; animationCallerSelfProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; litter[] = { {"All", "", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}} }; @@ -56,8 +56,8 @@ class ACE_Medical_Actions { litter[] = {}; }; class BodyBag: Bandage { - displayName = "$STR_ACE_MEDICAL_PlaceInBodyBag"; - displayNameProgress = "$STR_ACE_MEDICAL_PlacingInBodyBag"; + displayName = "$STR_ACE_Medical_PlaceInBodyBag"; + displayNameProgress = "$STR_ACE_Medical_PlacingInBodyBag"; treatmentLocations[] = {"All"}; requiredMedic = 0; treatmentTime = 2; @@ -72,8 +72,8 @@ class ACE_Medical_Actions { litter[] = {}; }; class Diagnose: Bandage { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Diagnose"; - displayNameProgress = "$STR_ACE_MEDICAL_ACTIONS_Diagnosing"; + displayName = "$STR_ACE_Medical_Actions_Diagnose"; + displayNameProgress = "$STR_ACE_Medical_Actions_Diagnosing"; treatmentLocations[] = {"All"}; requiredMedic = 0; treatmentTime = 1; @@ -109,8 +109,8 @@ class ACE_Medical_Actions { animationPatient = ""; animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback"; animationPatientUnconsciousExcludeOn[] = {"ainjppnemstpsnonwrfldnon"}; - animationCaller = "AinvPknlMstpSlayWnonDnon_medic"; - animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; + animationCaller = "AinvPknlMstpSlayWrflDnon_medicOther"; + animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medicOther"; animationCallerSelf = "AinvPknlMstpSlayW[wpn]Dnon_medic"; animationCallerSelfProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; litter[] = { {"All", "", {{"ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}} }; @@ -196,7 +196,7 @@ class ACE_Medical_Actions { }; class SurgicalKit: fieldDressing { displayName = ""; - displayNameProgress = ""; + displayNameProgress = "$STR_ACE_Medical_TreatmentAction"; items[] = {"ACE_surgicalKit"}; treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)}; requiredMedic = QGVAR(medicSetting_SurgicalKit); @@ -208,7 +208,7 @@ class ACE_Medical_Actions { }; class PersonalAidKit: fieldDressing { displayName = ""; - displayNameProgress = ""; + displayNameProgress = "$STR_ACE_Medical_TreatmentAction"; items[] = {"ACE_personalAidKit"}; treatmentLocations[] = {QGVAR(useLocation_PAK)}; requiredMedic = QGVAR(medicSetting_PAK); @@ -217,15 +217,15 @@ class ACE_Medical_Actions { itemConsumed = QGVAR(consumeItem_PAK); animationPatient = ""; animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback"; - animationCaller = "AinvPknlMstpSlayWnonDnon_medic"; - animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; + animationCaller = "AinvPknlMstpSlayWnonDnon_medicOther"; + animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medicOther"; animationCallerSelf = ""; animationCallerSelfProne = ""; litter[] = { {"All", "", {"ACE_MedicalLitter_gloves"}}, {"All", "", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}} }, {"All", "", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}} }; }; class CheckPulse: fieldDressing { displayName = ""; - displayNameProgress = ""; + displayNameProgress = "$STR_ACE_Medical_Check_Pulse_Content"; treatmentLocations[] = {"All"}; requiredMedic = 0; treatmentTime = 2; @@ -240,18 +240,21 @@ class ACE_Medical_Actions { }; class CheckBloodPressure: CheckPulse { callbackSuccess = QUOTE(DFUNC(actionCheckBloodPressure)); + displayNameProgress = "$STR_ACE_Medical_Check_Bloodpressure_Content"; }; class CheckResponse: CheckPulse { callbackSuccess = QUOTE(DFUNC(actionCheckResponse)); + displayNameProgress = "$STR_ACE_Medical_Check_Response_Content"; }; class RemoveTourniquet: CheckPulse { treatmentTime = 2.5; callbackSuccess = QUOTE(DFUNC(actionRemoveTourniquet)); condition = QUOTE([ARR_2(_this select 1, _this select 2)] call FUNC(hasTourniquetAppliedTo)); + displayNameProgress = "$STR_ACE_Medical_RemovingTourniquet"; }; class CPR: fieldDressing { - displayName = "$STR_ACE_MEDICAL_ACTIONS_CPR"; - displayNameProgress = "$STR_ACE_MEDICAL_ACTIONS_PerformingCPR"; + displayName = "$STR_ACE_Medical_Actions_CPR"; + displayNameProgress = "$STR_ACE_Medical_Actions_PerformingCPR"; treatmentLocations[] = {"All"}; requiredMedic = 0; treatmentTime = 15; @@ -270,8 +273,8 @@ class ACE_Medical_Actions { litter[] = {}; }; class BodyBag: fieldDressing { - displayName = "$STR_ACE_MEDICAL_PlaceInBodyBag"; - displayNameProgress = "$STR_ACE_MEDICAL_PlacingInBodyBag"; + displayName = "$STR_ACE_Medical_PlaceInBodyBag"; + displayNameProgress = "$STR_ACE_Medical_PlacingInBodyBag"; treatmentLocations[] = {"All"}; requiredMedic = 0; treatmentTime = 2; diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index e7f60a14e8..b3c2152df1 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -22,6 +22,10 @@ class ACE_Settings { typeName = "SCALAR"; value = 1; }; + class GVAR(painCoefficient) { + typeName = "SCALAR"; + value = 1; + }; class GVAR(enableAirway) { typeName = "BOOL"; value = false; @@ -50,15 +54,20 @@ class ACE_Settings { typeName = "SCALAR"; value = 1; }; - class GVAR(enableUnsconsiousnessAI) { + class GVAR(enableUnconsciousnessAI) { value = 1; typeName = "SCALAR"; - values[] = {"Disabled", "Enabled", "50/50"}; + values[] = {"Disabled", "50/50", "Enabled"}; }; class GVAR(preventInstaDeath) { typeName = "BOOL"; value = 0; }; + class GVAR(enableRevive) { + typeName = "SCALAR"; + value = 0; + values[] = {"Disabled", "Players only", "Players and AI"}; + }; class GVAR(maxReviveTime) { typeName = "SCALAR"; value = 120; @@ -143,4 +152,13 @@ class ACE_Settings { typeName = "BOOL"; value = 0; }; + + class GVAR(menuTypeStyle) { + displayName = "$STR_ACE_Medical_menuTypeDisplay"; + description = "$STR_ACE_Medical_menuTypeDescription"; + typeName = "SCALAR"; + value = 0; + values[] = {"$STR_ACE_Medical_useSelection"/*, "$STR_ACE_Medical_useRadial"*/}; + // isClientSettable = 1; + }; }; diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index 2b1f7c9468..4054a2ee1e 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -37,122 +37,6 @@ class CfgVehicles { }; }; }; - class enableFor { - displayName = "Enabled for"; - description = "Select what units the medical system will be enabled for (Adv only)"; - typeName = "NUMBER"; - class values { - class playableUnits { - name = "Players only."; - value = 0; - default = 1; - }; - class playableUnitsAndAI { - name = "Players and AI"; - value = 1; - }; - }; - }; - // TODO Disabled until the features are implemented - /*class enableAirway { - displayName = "Enable Airway"; - description = "Enable Advanced medical Airway (Adv only)"; - typeName = "BOOL"; - defaultValue = 0; - }; - class enableFractures { - displayName = "Enable Fractures"; - description = "Enable Advanced medical Fractures (Adv only)"; - typeName = "BOOL"; - defaultValue = 0; - };*/ - class enableAdvancedWounds { - displayName = "Enable Advanced wounds"; - description = "Allow reopening of bandaged wounds? (Adv only)"; - typeName = "BOOL"; - defaultValue = 0; - }; - class enableVehicleCrashes { - displayName = "Vehicle Crashes"; - description = "Do units take damage from a vehicle crash?"; - typeName = "BOOL"; - defaultValue = 1; - }; - class enableScreams { - displayName = "Enable Screams"; - description = "Enable screaming by injuried units"; - typeName = "BOOL"; - defaultValue = 1; - }; - class playerDamageThreshold { - displayName = "Player Damage"; - description = "What is the damage a player can take before being killed?"; - typeName = "NUMBER"; - defaultValue = 1; - }; - class AIDamageThreshold { - displayName = "AI Damage"; - description = "What is the damage an AI can take before being killed?"; - typeName = "NUMBER"; - defaultValue = 1; - }; - class enableUnsconsiousnessAI { - displayName = "AI Unconsciousness"; - description = "Allow AI to go unconscious"; - typeName = "NUMBER"; - class values { - class disable { - name = "Disabled"; - value = 0; - }; - class normal { - name = "Enabled"; - value = 1; - default = 1; - }; - class full { - name = "50/50"; - value = 2; - }; - }; - }; - class preventInstaDeath { - displayName = "Prevent instant death"; - description = "Have a unit move to unconscious instead of death"; - typeName = "BOOL"; - defaultValue = 0; - }; - class bleedingCoefficient { - displayName = "Bleeding coefficient"; - description = "Coefficient to modify the bleeding speed"; - typeName = "NUMBER"; - defaultValue = 1; - }; - class keepLocalSettingsSynced { - displayName = "Sync status"; - description = "Keep unit status synced. Recommended on."; - typeName = "BOOL"; - defaultValue = 1; - }; - }; - class ModuleDescription { - description = "Provides a medical system for both players and AI."; - sync[] = {}; - }; - }; - - class ACE_moduleTreatmentSettings: ACE_Module { - scope = 2; - displayName = "Treatment Settings [ACE]"; - icon = QUOTE(PATHTOF(UI\Icon_Module_Medical_ca.paa)); - category = "ACE_medical"; - function = QUOTE(FUNC(moduleTreatmentConfiguration)); - functionPriority = 10; - isGlobal = 2; - isTriggerActivated = 0; - isDisposable = 0; - author = "$STR_ACE_Common_ACETeam"; - class Arguments { class medicSetting { displayName = "Medics setting"; description = "What is the level of detail prefered for medics?"; @@ -173,24 +57,6 @@ class CfgVehicles { }; }; }; - class maxReviveTime { - displayName = "Max Revive time"; - description = "Max amount of seconds a unit can spend in revive state"; - typeName = "NUMBER"; - defaultValue = 120; - }; - class amountOfReviveLives { - displayName = "Max Revive lives"; - description = "Max amount of lives a unit. 0 or -1 is disabled."; - typeName = "NUMBER"; - defaultValue = -1; - }; - class enableOverdosing { - displayName = "Enable Overdosing"; - description = "Enable overdosing of medications"; - typeName = "BOOL"; - defaultValue = 1; - }; class allowLitterCreation { displayName = "Enable Litter"; description = "Enable litter being created upon treatment"; @@ -203,18 +69,127 @@ class CfgVehicles { typeName = "NUMBER"; defaultValue = 1800; }; + class enableScreams { + displayName = "Enable Screams"; + description = "Enable screaming by injuried units"; + typeName = "BOOL"; + defaultValue = 1; + }; + class playerDamageThreshold { + displayName = "Player Damage"; + description = "What is the damage a player can take before being killed?"; + typeName = "NUMBER"; + defaultValue = 1; + }; + class AIDamageThreshold { + displayName = "AI Damage"; + description = "What is the damage an AI can take before being killed?"; + typeName = "NUMBER"; + defaultValue = 1; + }; + class enableUnconsciousnessAI { + displayName = "AI Unconsciousness"; + description = "Allow AI to go unconscious"; + typeName = "NUMBER"; + class values { + class disable { + name = "Disabled"; + value = 0; + }; + class normal { + name = "50/50"; + value = 1; + default = 1; + }; + class full { + name = "Enabled"; + value = 2; + }; + }; + }; + class preventInstaDeath { + displayName = "Prevent instant death"; + description = "Have a unit move to unconscious instead of death"; + typeName = "BOOL"; + defaultValue = 0; + }; + class bleedingCoefficient { + displayName = "Bleeding coefficient"; + description = "Coefficient to modify the bleeding speed"; + typeName = "NUMBER"; + defaultValue = 1; + }; + class painCoefficient { + displayName = "Pain coefficient"; + description = "Coefficient to modify the pain intensity"; + typeName = "NUMBER"; + defaultValue = 1; + }; + class keepLocalSettingsSynced { + displayName = "Sync status"; + description = "Keep unit status synced. Recommended on."; + typeName = "BOOL"; + defaultValue = 1; + }; + }; + class ModuleDescription { + description = "Provides a medical system for both players and AI."; + sync[] = {}; + }; + }; + + class ACE_moduleAdvancedMedicalSettings: ACE_Module { + scope = 2; + displayName = "Advanced Medical Settings [ACE]"; + icon = QUOTE(PATHTOF(UI\Icon_Module_Medical_ca.paa)); + category = "ACE_medical"; + function = QUOTE(FUNC(moduleAdvancedMedicalSettings)); + functionPriority = 10; + isGlobal = 2; + isTriggerActivated = 0; + isDisposable = 0; + author = "$STR_ACE_Common_ACETeam"; + class Arguments { + class enableFor { + displayName = "Enabled for"; + description = "Select what units the advanced medical system will be enabled for"; + typeName = "NUMBER"; + class values { + class playableUnits { + name = "Players only."; + value = 0; + default = 1; + }; + class playableUnitsAndAI { + name = "Players and AI"; + value = 1; + }; + }; + }; + class enableAdvancedWounds { + displayName = "Enable Advanced wounds"; + description = "Allow reopening of bandaged wounds?"; + typeName = "BOOL"; + defaultValue = 0; + }; + class enableVehicleCrashes { + displayName = "Vehicle Crashes"; + description = "Do units take damage from a vehicle crash?"; + typeName = "BOOL"; + defaultValue = 1; + }; class medicSetting_PAK { - displayName = "Allow PAK (Adv)"; + displayName = "Allow PAK"; description = "Who can use the PAK for full heal?"; typeName = "NUMBER"; class values { class anyone { name = "Anyone"; value = 0; }; class Medic { name = "Medics only"; value = 1; default = 1; }; - class Special { name = "Doctors only (Adv)"; value = 2; }; + class Special { name = "Doctors only"; value = 2; }; }; }; class consumeItem_PAK { - displayName = "Remove PAK on use (Adv)"; + displayName = "Remove PAK on use"; description = "Should PAK be removed on usage?"; typeName = "NUMBER"; class values { @@ -223,7 +198,7 @@ class CfgVehicles { }; }; class useLocation_PAK { - displayName = "Locations PAK (Adv)"; + displayName = "Locations PAK"; description = "Where can the personal aid kit be used?"; typeName = "NUMBER"; class values { @@ -254,6 +229,47 @@ class CfgVehicles { }; }; + + class ACE_moduleReviveSettings: ACE_Module { + scope = 2; + displayName = "Revive Settings [ACE]"; + icon = QUOTE(PATHTOF(UI\Icon_Module_Medical_ca.paa)); + category = "ACE_medical"; + function = QUOTE(DFUNC(moduleReviveSettings)); + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + author = "$STR_ACE_Common_ACETeam"; + class Arguments { + class enableRevive { + displayName = "Enable Revive"; + description = "Enable a basic revive system"; + typeName = "NUMBER"; + defaultValue = 0; + class values { + class disable { name = "Disabled"; value = 0; default = 1;}; + class playerOnly { name = "Player only"; value = 1; }; + class playerAndAI { name = "Player & AI"; value = 2; }; + }; + }; + class maxReviveTime { + displayName = "Max Revive time"; + description = "Max amount of seconds a unit can spend in revive state"; + typeName = "NUMBER"; + defaultValue = 120; + }; + class amountOfReviveLives { + displayName = "Max Revive lives"; + description = "Max amount of lives a unit. 0 or -1 is disabled."; + typeName = "NUMBER"; + defaultValue = -1; + }; + }; + class ModuleDescription { + description = "Provides a medical system for both players and AI."; + sync[] = {}; + }; + }; class ACE_moduleAssignMedicRoles: Module_F { scope = 2; displayName = "Set Medic Class [ACE]"; @@ -288,7 +304,7 @@ class CfgVehicles { }; class doctor { name = "Doctor (Only Advanced Medics)"; - value = 1; + value = 2; }; }; }; @@ -428,20 +444,23 @@ class CfgVehicles { class ACE_Actions { // Include actions in body parts for treatment while in the open #define EXCEPTIONS exceptions[] = {}; + #define ACTION_CONDITION condition = QUOTE(GVAR(menuTypeStyle) == 0); #include "ACE_Medical_Actions.hpp" // Create a consolidates medical menu for treatment while boarded class ACE_MainActions { class Medical { - displayName = "$STR_ACE_MEDICAL_ACTIONS_Medical"; + displayName = "$STR_ACE_Medical_Actions_Medical"; runOnHover = 1; exceptions[] = {"isNotInside"}; - condition = QUOTE(vehicle _target != _target); + condition = QUOTE((vehicle _target != _target && vehicle _target == vehicle _player) || GVAR(menuTypeStyle) == 1); statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation)); icon = PATHTOF(UI\icons\medical_cross.paa); #undef EXCEPTIONS + #undef ACTION_CONDITION #define EXCEPTIONS exceptions[] = {"isNotInside"}; + #define ACTION_CONDITION condition = "true"; #include "ACE_Medical_Actions.hpp" }; class GVAR(loadPatient) { @@ -462,7 +481,7 @@ class CfgVehicles { showDisabled = 0; priority = 2; icon = PATHTOF(UI\icons\medical_cross.paa); - exceptions[] = {"isNotDragging", "isNotCarrying"}; + exceptions[] = {"isNotDragging", "isNotCarrying", "isNotInside"}; }; }; }; @@ -638,9 +657,9 @@ class CfgVehicles { XEH_ENABLED; scope = 1; side = -1; - model = QUOTE(PATHTOF(data\bodybag.p3d)); + model = QUOTE(PATHTOEF(apl,bodybag.p3d)); icon = ""; - displayName = $STR_ACE_MEDICAL_BODYBAG_DISPLAY; + displayName = $STR_ACE_Medical_Bodybag_Display; EGVAR(dragging,canDrag) = 1; EGVAR(dragging,dragPosition[]) = {0,1.2,0}; EGVAR(dragging,dragDirection) = 0; @@ -693,7 +712,7 @@ class CfgVehicles { class ACE_fieldDressingItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_BANDAGE_BASIC_DISPLAY; + displayName = $STR_ACE_Medical_Bandage_Basic_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -706,7 +725,7 @@ class CfgVehicles { class ACE_packingBandageItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY; + displayName = $STR_ACE_Medical_Packing_Bandage_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -719,7 +738,7 @@ class CfgVehicles { class ACE_elasticBandageItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY; + displayName = $STR_ACE_Medical_Bandage_Elastic_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -732,7 +751,7 @@ class CfgVehicles { class ACE_tourniquetItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY; + displayName = $STR_ACE_Medical_Tourniquet_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -745,7 +764,7 @@ class CfgVehicles { class ACE_morphineItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY; + displayName = $STR_ACE_Medical_Morphine_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -758,7 +777,7 @@ class CfgVehicles { class ACE_atropineItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY; + displayName = $STR_ACE_Medical_Atropine_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -771,7 +790,7 @@ class CfgVehicles { class ACE_epinephrineItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY; + displayName = $STR_ACE_Medical_Epinephrine_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -784,7 +803,7 @@ class CfgVehicles { class ACE_plasmaIVItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_PLASMA_IV; + displayName = $STR_ACE_Medical_Plasma_IV; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -798,7 +817,7 @@ class CfgVehicles { class ACE_bloodIVItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_BLOOD_IV; + displayName = $STR_ACE_Medical_Blood_IV; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -811,7 +830,7 @@ class CfgVehicles { class ACE_salineIVItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_SALINE_IV; + displayName = $STR_ACE_Medical_Saline_IV; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -824,7 +843,7 @@ class CfgVehicles { class ACE_quikClotItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY; + displayName = $STR_ACE_Medical_QuikClot_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -837,7 +856,7 @@ class CfgVehicles { class ACE_personalAidKitItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY; + displayName = $STR_ACE_Medical_Aid_Kit_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -850,7 +869,7 @@ class CfgVehicles { class ACE_surgicalKitItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_SURGICALKIT_DISPLAY; + displayName = $STR_ACE_Medical_SurgicalKit_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { @@ -863,7 +882,7 @@ class CfgVehicles { class ACE_bodyBagItem: Item_Base_F { scope = 2; scopeCurator = 2; - displayName = $STR_ACE_MEDICAL_BODYBAG_DISPLAY; + displayName = $STR_ACE_Medical_Bodybag_Display; author = "$STR_ACE_Common_ACETeam"; vehicleClass = "Items"; class TransportItems { diff --git a/addons/medical/CfgWeapons.hpp b/addons/medical/CfgWeapons.hpp index 8c45b6906c..d70b64a1d2 100644 --- a/addons/medical/CfgWeapons.hpp +++ b/addons/medical/CfgWeapons.hpp @@ -24,64 +24,64 @@ class CfgWeapons { scope = 2; model = QUOTE(PATHTOF(data\bandage.p3d)); picture = QUOTE(PATHTOF(ui\items\fieldDressing_x_ca.paa)); - displayName = $STR_ACE_MEDICAL_BANDAGE_BASIC_DISPLAY; - descriptionShort = $STR_ACE_MEDICAL_BANDAGE_BASIC_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_BANDAGE_BASIC_DESC_USE; + displayName = $STR_ACE_Medical_Bandage_Basic_Display; + descriptionShort = $STR_ACE_Medical_Bandage_Basic_Desc_Short; + descriptionUse = $STR_ACE_Medical_Bandage_Basic_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 1; }; }; class ACE_packingBandage: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY; + displayName = $STR_ACE_Medical_Packing_Bandage_Display; picture = QUOTE(PATHTOF(ui\items\packingBandage_x_ca.paa)); model = QUOTE(PATHTOF(data\packingbandage.p3d)); - descriptionShort = $STR_ACE_MEDICAL_PACKING_BANDAGE_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_PACKING_BANDAGE_DESC_USE; + descriptionShort = $STR_ACE_Medical_Packing_Bandage_Desc_Short; + descriptionUse = $STR_ACE_Medical_Packing_Bandage_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 1; }; }; class ACE_elasticBandage: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY; + displayName = $STR_ACE_Medical_Bandage_Elastic_Display; picture = QUOTE(PATHTOF(ui\items\elasticBandage_x_ca.paa)); model = "\A3\Structures_F_EPA\Items\Medical\Bandage_F.p3d"; - descriptionShort = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DESC_USE; + descriptionShort = $STR_ACE_Medical_Bandage_Elastic_Desc_Short; + descriptionUse = $STR_ACE_Medical_Bandage_Elastic_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 1; }; }; class ACE_tourniquet: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY; + displayName = $STR_ACE_Medical_Tourniquet_Display; picture = QUOTE(PATHTOF(ui\items\tourniquet_x_ca.paa)); model = QUOTE(PATHTOF(data\tourniquet.p3d)); - descriptionShort = $STR_ACE_MEDICAL_TOURNIQUET_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_TOURNIQUET_DESC_USE; + descriptionShort = $STR_ACE_Medical_Tourniquet_Desc_Short; + descriptionUse = $STR_ACE_Medical_Tourniquet_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 1; }; }; class ACE_morphine: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY; + displayName = $STR_ACE_Medical_Morphine_Display; picture = QUOTE(PATHTOF(ui\items\morphine_x_ca.paa)); model = QUOTE(PATHTOF(data\morphine.p3d)); - descriptionShort = $STR_ACE_MEDICAL_MORPHINE_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_MORPHINE_DESC_USE; + descriptionShort = $STR_ACE_Medical_Morphine_Desc_Short; + descriptionUse = $STR_ACE_Medical_Morphine_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 1; }; }; class ACE_atropine: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY; + displayName = $STR_ACE_Medical_Atropine_Display; picture = QUOTE(PATHTOF(ui\items\atropine_x_ca.paa)); model = QUOTE(PATHTOF(data\atropine.p3d)); - descriptionShort = $STR_ACE_MEDICAL_ATROPINE_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_ATROPINE_DESC_USE; + descriptionShort = $STR_ACE_Medical_Atropine_Desc_Short; + descriptionUse = $STR_ACE_Medical_Atropine_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 1; @@ -89,33 +89,33 @@ class CfgWeapons { }; class ACE_epinephrine: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY; + displayName = $STR_ACE_Medical_Epinephrine_Display; picture = QUOTE(PATHTOF(ui\items\epinephrine_x_ca.paa)); model = QUOTE(PATHTOF(data\epinephrine.p3d)); - descriptionShort = $STR_ACE_MEDICAL_EPINEPHRINE_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_EPINEPHRINE_DESC_USE; + descriptionShort = $STR_ACE_Medical_Epinephrine_Desc_Short; + descriptionUse = $STR_ACE_Medical_Epinephrine_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 1; }; }; class ACE_plasmaIV: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_PLASMA_IV; + displayName = $STR_ACE_Medical_Plasma_IV; picture = QUOTE(PATHTOF(ui\items\plasmaIV_x_ca.paa)); - descriptionShort = $STR_ACE_MEDICAL_PLASMA_IV_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_PLASMA_IV_DESC_USE; + descriptionShort = $STR_ACE_Medical_Plasma_IV_Desc_Short; + descriptionUse = $STR_ACE_Medical_Plasma_IV_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 10; }; }; class ACE_plasmaIV_500: ACE_plasmaIV { - displayName = $STR_ACE_MEDICAL_PLASMA_IV_500; + displayName = $STR_ACE_Medical_Plasma_IV_500; class ItemInfo: InventoryItem_Base_F { mass = 5; }; }; class ACE_plasmaIV_250: ACE_plasmaIV { - displayName = $STR_ACE_MEDICAL_PLASMA_IV_250; + displayName = $STR_ACE_Medical_Plasma_IV_250; class ItemInfo: InventoryItem_Base_F { mass = 2.5; }; @@ -123,86 +123,86 @@ class CfgWeapons { class ACE_bloodIV: ACE_ItemCore { scope = 2; model = "\A3\Structures_F_EPA\Items\Medical\BloodBag_F.p3d"; - displayName = $STR_ACE_MEDICAL_BLOOD_IV; + displayName = $STR_ACE_Medical_Blood_IV; picture = QUOTE(PATHTOF(ui\items\bloodIV_x_ca.paa)); - descriptionShort = $STR_ACE_MEDICAL_BLOOD_IV_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_BLOOD_IV_DESC_USE; + descriptionShort = $STR_ACE_Medical_Blood_IV_Desc_Short; + descriptionUse = $STR_ACE_Medical_Blood_IV_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 10; }; }; class ACE_bloodIV_500: ACE_bloodIV { - displayName = $STR_ACE_MEDICAL_BLOOD_IV_500; + displayName = $STR_ACE_Medical_Blood_IV_500; class ItemInfo: InventoryItem_Base_F { mass = 5; }; }; class ACE_bloodIV_250: ACE_bloodIV { - displayName = $STR_ACE_MEDICAL_BLOOD_IV_250; + displayName = $STR_ACE_Medical_Blood_IV_250; class ItemInfo: InventoryItem_Base_F { mass = 2.5; }; }; class ACE_salineIV: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_SALINE_IV; + displayName = $STR_ACE_Medical_Saline_IV; picture = QUOTE(PATHTOF(ui\items\salineIV_x_ca.paa)); - descriptionShort = $STR_ACE_MEDICAL_SALINE_IV_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_SALINE_IV_DESC_USE; + descriptionShort = $STR_ACE_Medical_Saline_IV_Desc_Short; + descriptionUse = $STR_ACE_Medical_Saline_IV_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 10; }; }; class ACE_salineIV_500: ACE_salineIV { - displayName = $STR_ACE_MEDICAL_SALINE_IV_500; + displayName = $STR_ACE_Medical_Saline_IV_500; class ItemInfo: InventoryItem_Base_F { mass = 2.5; }; }; class ACE_salineIV_250: ACE_salineIV { - displayName = $STR_ACE_MEDICAL_SALINE_IV_250; + displayName = $STR_ACE_Medical_Saline_IV_250; class ItemInfo: InventoryItem_Base_F { mass = 2.5; }; }; class ACE_quikclot: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY; + displayName = $STR_ACE_Medical_QuikClot_Display; picture = QUOTE(PATHTOF(ui\items\quickclot_x_ca.paa)); - descriptionShort = $STR_ACE_MEDICAL_QUIKCLOT_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_QUIKCLOT_DESC_USE; + descriptionShort = $STR_ACE_Medical_QuikClot_Desc_Short; + descriptionUse = $STR_ACE_Medical_QuikClot_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 1; }; }; class ACE_personalAidKit: ACE_ItemCore { scope = 2; - displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY; + displayName = $STR_ACE_Medical_Aid_Kit_Display; picture = QUOTE(PATHTOF(ui\items\personal_aid_kit_x_ca.paa)); - descriptionShort = $STR_ACE_MEDICAL_AID_KIT_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_AID_KIT_DESC_USE; + descriptionShort = $STR_ACE_Medical_Aid_Kit_Desc_Short; + descriptionUse = $STR_ACE_Medical_Aid_Kit_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 2; }; }; class ACE_surgicalKit: ACE_ItemCore { scope=2; - displayName= $STR_ACE_MEDICAL_SURGICALKIT_DISPLAY; + displayName= $STR_ACE_Medical_SurgicalKit_Display; model = QUOTE(PATHTOF(data\surgical_kit.p3d)); picture = QUOTE(PATHTOF(ui\items\surgicalKit_x_ca.paa)); - descriptionShort = $STR_ACE_MEDICAL_SURGICALKIT_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_SURGICALKIT_DESC_USE; + descriptionShort = $STR_ACE_Medical_SurgicalKit_Desc_Short; + descriptionUse = $STR_ACE_Medical_SurgicalKit_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 5; }; }; class ACE_bodyBag: ACE_ItemCore { scope=2; - displayName= $STR_ACE_MEDICAL_BODYBAG_DISPLAY; + displayName= $STR_ACE_Medical_Bodybag_Display; model = QUOTE(PATHTOF(data\bodybagItem.p3d)); picture = QUOTE(PATHTOF(ui\items\bodybag_x_ca.paa)); - descriptionShort = $STR_ACE_MEDICAL_BODYBAG_DESC_SHORT; - descriptionUse = $STR_ACE_MEDICAL_BODYBAG_DESC_USE; + descriptionShort = $STR_ACE_Medical_Bodybag_Desc_Short; + descriptionUse = $STR_ACE_Medical_Bodybag_Desc_Use; class ItemInfo: InventoryItem_Base_F { mass = 15; }; diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 526990709b..f8129e5e78 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -2,8 +2,6 @@ #include "script_component.hpp" -GVAR(enabledFor) = 1; // TODO remove this once we implement settings. Just here to get the vitals working. - GVAR(heartBeatSounds_Fast) = ["ACE_heartbeat_fast_1", "ACE_heartbeat_fast_2", "ACE_heartbeat_fast_3"]; GVAR(heartBeatSounds_Normal) = ["ACE_heartbeat_norm_1", "ACE_heartbeat_norm_2"]; GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"]; @@ -14,6 +12,7 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"]; ["medical_onUnconscious", { if (local (_this select 0)) then { + private ["_unit"]; _unit = _this select 0; if (_this select 1) then { _unit setVariable ["tf_globalVolume", 0.4]; @@ -36,7 +35,7 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"]; // Initialize all effects _fnc_createEffect = { - private ["_type", "_layer", "_default"]; + private ["_type", "_layer", "_default", "_effect"]; _type = _this select 0; _layer = _this select 1; _default = _this select 2; @@ -91,6 +90,7 @@ GVAR(effectTimeBlood) = time; // MAIN EFFECTS LOOP [{ + private["_bleeding", "_blood"]; // Zeus interface is open or player is dead; disable everything if (!(isNull (findDisplay 312)) or !(alive ACE_player)) exitWith { GVAR(effectUnconsciousCC) ppEffectEnable false; @@ -131,7 +131,7 @@ GVAR(effectTimeBlood) = time; }; }; - _bleeding = ACE_player call FUNC(getBloodLoss); + _bleeding = [ACE_player] call FUNC(getBloodLoss); // Bleeding Indicator if (_bleeding > 0 and GVAR(effectTimeBlood) + 3.5 < time) then { GVAR(effectTimeBlood) = time; @@ -155,6 +155,7 @@ GVAR(lastHeartBeatSound) = time; // HEARTRATE BASED EFFECTS [{ + private["_heartRate", "_interval", "_minTime", "_sound", "_strength"]; _heartRate = ACE_player getVariable [QGVAR(heartRate), 70]; if (GVAR(level) == 1) then { _heartRate = 60 + 40 * (ACE_player getVariable [QGVAR(pain), 0]); @@ -166,7 +167,7 @@ GVAR(lastHeartBeatSound) = time; // Pain effect _strength = ACE_player getVariable [QGVAR(pain), 0]; - // _strength = _strength * (ACE_player getVariable [QGVAR(coefPain), GVAR(coefPain)]); @todo + _strength = _strength * (ACE_player getVariable [QGVAR(painCoefficient), GVAR(painCoefficient)]); if (GVAR(painEffectType) == 1) then { GVAR(effectPainCC) ppEffectEnable false; if ((ACE_player getVariable [QGVAR(pain), 0]) > 0 && {alive ACE_player}) then { @@ -250,7 +251,7 @@ if (USE_WOUND_EVENT_SYNC) then { [ {(((_this select 0) getvariable [QGVAR(bloodVolume), 100]) < 65)}, {(((_this select 0) getvariable [QGVAR(pain), 0]) > 0.9)}, - {(((_this select 0) call FUNC(getBloodLoss)) > 0.25)}, + {(([_this select 0] call FUNC(getBloodLoss)) > 0.25)}, {((_this select 0) getvariable [QGVAR(inReviveState), false])}, {((_this select 0) getvariable [QGVAR(inCardiacArrest), false])}, {((_this select 0) getvariable ["ACE_isDead", false])}, @@ -266,6 +267,12 @@ if (USE_WOUND_EVENT_SYNC) then { [ACE_player] call FUNC(itemCheck); }] call EFUNC(common,addEventHandler); - // Networked litter [QGVAR(createLitter), FUNC(handleCreateLitter), GVAR(litterCleanUpDelay)] call EFUNC(common,addSyncedEventHandler); + +if (hasInterface) then { + ["PlayerJip", { + diag_log format["[ACE] JIP Medical init for player"]; + [player] call FUNC(init); + }] call FUNC(addEventHandler); +}; diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index b6deca4033..4f4ff5bc30 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -80,8 +80,10 @@ PREP(treatmentAdvanced_medication); PREP(treatmentAdvanced_medicationLocal); PREP(treatmentBasic_bandage); PREP(treatmentBasic_bloodbag); +PREP(treatmentBasic_bloodbagLocal); PREP(treatmentBasic_epipen); PREP(treatmentBasic_morphine); +PREP(treatmentBasic_morphineLocal); PREP(treatmentIV); PREP(treatmentIVLocal); PREP(treatmentTourniquet); @@ -92,10 +94,11 @@ PREP(displayPatientInformation); PREP(displayTriageCard); PREP(dropDownTriageCard); PREP(moduleMedicalSettings); +PREP(moduleAdvancedMedicalSettings); +PREP(moduleReviveSettings); PREP(moduleAssignMedicRoles); PREP(moduleAssignMedicalVehicle); PREP(moduleAssignMedicalFacility); -PREP(moduleTreatmentConfiguration); PREP(copyDeadBody); PREP(requestWoundSync); PREP(unconsciousPFH); diff --git a/addons/medical/XEH_respawn.sqf b/addons/medical/XEH_respawn.sqf index ac6cc2d6ef..0a95e064fd 100644 --- a/addons/medical/XEH_respawn.sqf +++ b/addons/medical/XEH_respawn.sqf @@ -8,7 +8,13 @@ if !(local _unit) exitWith {}; [_unit] call FUNC(init); -//Reset captive status for respawning unit +// Reset captive status for respawning unit if (!(_unit getVariable ["ACE_isUnconscious", false])) then { [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); }; + +// Remove maximum unconsciousness time handler +_maxUnconHandle = _unit getVariable [QGVAR(maxUnconTimeHandle), -1]; +if (_maxUnconHandle > 0) then { + [_maxUnconHandle] call CBA_fnc_removePerFrameHandler; +}; diff --git a/addons/medical/config.cpp b/addons/medical/config.cpp index de99778c11..566de29f91 100644 --- a/addons/medical/config.cpp +++ b/addons/medical/config.cpp @@ -5,7 +5,7 @@ class CfgPatches { units[] = {"ACE_medicalSupplyCrate", "ACE_medicalSupplyCrate_advanced", "ACE_fieldDressingItem", "ACE_packingBandageItem", "ACE_elasticBandageItem", "ACE_tourniquetItem", "ACE_morphineItem", "ACE_atropineItem", "ACE_epinephrineItem", "ACE_plasmaIVItem", "ACE_bloodIVItem", "ACE_salineIVItem", "ACE_quikclotItem", "ACE_personalAidKitItem", "ACE_surgicalKitItem", "ACE_bodyBagItem", "ACE_bodyBagObject"}; weapons[] = {"ACE_fieldDressing", "ACE_packingBandage", "ACE_elasticBandage", "ACE_tourniquet", "ACE_morphine", "ACE_atropine", "ACE_epinephrine", "ACE_plasmaIV", "ACE_plasmaIV_500", "ACE_plasmaIV_250", "ACE_bloodIV", "ACE_bloodIV_500", "ACE_bloodIV_250", "ACE_salineIV", "ACE_salineIV_500", "ACE_salineIV_250", "ACE_quikclot", "ACE_personalAidKit", "ACE_surgicalKit", "ACE_bodyBag"}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_interaction","ace_modules"}; + requiredAddons[] = {"ace_interaction","ace_modules", "ace_apl"}; author[] = {"Glowbal", "KoffienFlummi"}; authorUrl = ""; VERSION_CONFIG; diff --git a/addons/medical/data/bodybag.p3d b/addons/medical/data/bodybag.p3d deleted file mode 100644 index 1fec3a05f0..0000000000 Binary files a/addons/medical/data/bodybag.p3d and /dev/null differ diff --git a/addons/medical/data/surgical_kit.rvmat b/addons/medical/data/surgical_kit.rvmat index e7db14f08b..71d266f668 100644 --- a/addons/medical/data/surgical_kit.rvmat +++ b/addons/medical/data/surgical_kit.rvmat @@ -80,7 +80,7 @@ class Stage6 }; class Stage7 { - texture="z\ace\addons\medical\data\env_co.tga"; + texture="z\ace\addons\apl\data\env_co.tga"; uvSource="tex"; class uvTransform { diff --git a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf index a9228d1760..560b171400 100644 --- a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" -private ["_caller","_target","_bloodPressure","_bloodPressureHigh","_bloodPressureLow","_title","_content"]; +private ["_caller","_target","_bloodPressure","_bloodPressureHigh","_bloodPressureLow", "_logOutPut", "_output"]; _caller = _this select 0; _target = _this select 1; @@ -28,27 +28,27 @@ _bloodPressureLow = _bloodPressure select 0; _output = ""; _logOutPut = ""; if ([_caller] call FUNC(isMedic)) then { - _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_1"; + _output = "STR_ACE_Medical_Check_Bloodpressure_Output_1"; _logOutPut = format["%1/%2",round(_bloodPressureHigh),round(_bloodPressureLow)]; } else { if (_bloodPressureHigh > 20) then { - _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_2"; - _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOW"; + _output = "STR_ACE_Medical_Check_Bloodpressure_Output_2"; + _logOutPut = localize "STR_ACE_Medical_Check_Bloodpressure_Low"; if (_bloodPressureHigh > 100) then { - _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_3"; - _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NORMAL"; + _output = "STR_ACE_Medical_Check_Bloodpressure_Output_3"; + _logOutPut = localize "STR_ACE_Medical_Check_Bloodpressure_Normal"; if (_bloodPressureHigh > 160) then { - _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_4"; - _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_HIGH"; + _output = "STR_ACE_Medical_Check_Bloodpressure_Output_4"; + _logOutPut = localize "STR_ACE_Medical_Check_Bloodpressure_High"; }; }; } else { if (random(10) > 3) then { - _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_5"; - _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NOBLOODPRESSURE"; + _output = "STR_ACE_Medical_Check_Bloodpressure_Output_5"; + _logOutPut = localize "STR_ACE_Medical_Check_Bloodpressure_NoBloodpressure"; } else { - _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_6"; + _output = "STR_ACE_Medical_Check_Bloodpressure_Output_6"; }; }; }; @@ -56,5 +56,5 @@ if ([_caller] call FUNC(isMedic)) then { ["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName), round(_bloodPressureHigh),round(_bloodPressureLow)], 1.75, _caller]] call EFUNC(common,targetEvent); if (_logOutPut != "") then { - [_target,"activity", localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOG", [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog); + [_target,"activity", localize "STR_ACE_Medical_Check_Bloodpressure_Log", [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog); }; diff --git a/addons/medical/functions/fnc_actionCheckPulse.sqf b/addons/medical/functions/fnc_actionCheckPulse.sqf index f545c11144..fd96321e8f 100644 --- a/addons/medical/functions/fnc_actionCheckPulse.sqf +++ b/addons/medical/functions/fnc_actionCheckPulse.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" -private ["_caller","_target","_title","_content"]; +private ["_caller","_target"]; _caller = _this select 0; _target = _this select 1; [[_caller, _target], QUOTE(DFUNC(actionCheckPulseLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf index dcb098c925..85e9bee828 100644 --- a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" -private ["_caller","_unit", "_heartRateOutput", "_heartRate","_logOutPut","_content"]; +private ["_caller", "_unit", "_heartRateOutput", "_heartRate", "_logOutPut"]; _caller = _this select 0; _unit = _this select 1; @@ -23,24 +23,24 @@ _heartRate = _unit getvariable [QGVAR(heartRate), 80]; if (!alive _unit) then { _heartRate = 0; }; -_heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_5"; +_heartRateOutput = "STR_ACE_Medical_Check_Pulse_Output_5"; _logOutPut = "No heart rate"; if (_heartRate > 1.0) then { if ([_caller] call FUNC(isMedic)) then { - _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_1"; + _heartRateOutput = "STR_ACE_Medical_Check_Pulse_Output_1"; _logOutPut = format["%1",round(_heartRate)]; } else { // non medical personel will only find a pulse/HR - _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_2"; - _logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_WEAK"; + _heartRateOutput = "STR_ACE_Medical_Check_Pulse_Output_2"; + _logOutPut = localize "STR_ACE_Medical_Check_Pulse_Weak"; if (_heartRate > 60) then { if (_heartRate > 100) then { - _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_3"; - _logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_STRONG"; + _heartRateOutput = "STR_ACE_Medical_Check_Pulse_Output_3"; + _logOutPut = localize "STR_ACE_Medical_Check_Pulse_Strong"; } else { - _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_4"; - _logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_NORMAL"; + _heartRateOutput = "STR_ACE_Medical_Check_Pulse_Output_4"; + _logOutPut = localize "STR_ACE_Medical_Check_Pulse_Normal"; }; }; }; @@ -49,5 +49,5 @@ if (_heartRate > 1.0) then { ["displayTextStructured", [_caller], [[_heartRateOutput, [_unit] call EFUNC(common,getName), round(_heartRate)], 1.5, _caller]] call EFUNC(common,targetEvent); if (_logOutPut != "") then { - [_unit,"activity", localize "STR_ACE_MEDICAL_CHECK_PULSE_LOG",[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog); + [_unit,"activity", localize "STR_ACE_Medical_Check_Pulse_Log",[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog); }; diff --git a/addons/medical/functions/fnc_actionCheckResponse.sqf b/addons/medical/functions/fnc_actionCheckResponse.sqf index c483706274..92e724a3e0 100644 --- a/addons/medical/functions/fnc_actionCheckResponse.sqf +++ b/addons/medical/functions/fnc_actionCheckResponse.sqf @@ -14,15 +14,15 @@ #include "script_component.hpp" -private ["_caller","_target"]; +private ["_caller","_target", "_output"]; _caller = _this select 0; _target = _this select 1; _output = ""; if ([_target] call EFUNC(common,isAwake)) then { - _output = "STR_ACE_MEDICAL_CHECK_REPONSE_RESPONSIVE"; + _output = "STR_ACE_Medical_Check_Response_Responsive"; } else { - _output = "STR_ACE_MEDICAL_CHECK_REPONSE_UNRESPONSIVE"; + _output = "STR_ACE_Medical_Check_Response_Unresponsive"; }; ["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName)], 2, _caller]] call EFUNC(common,targetEvent); diff --git a/addons/medical/functions/fnc_actionDiagnose.sqf b/addons/medical/functions/fnc_actionDiagnose.sqf index 234cc6d303..d0a5aebc9f 100644 --- a/addons/medical/functions/fnc_actionDiagnose.sqf +++ b/addons/medical/functions/fnc_actionDiagnose.sqf @@ -14,28 +14,32 @@ #include "script_component.hpp" -private ["_caller","_target","_title","_content"]; +private ["_caller", "_target", "_genericMessages"]; _caller = _this select 0; _target = _this select 1; -_genericMessages = ["STR_ACE_MEDICAL_diagnoseMessage"]; +_genericMessages = ["STR_ACE_Medical_diagnoseMessage"]; _genericMessages pushBack ([_target] call EFUNC(common,getName)); if (alive _target) then { - _genericMessages pushback "STR_ACE_MEDICAL_diagnoseAlive"; + _genericMessages pushback "STR_ACE_Medical_diagnoseAlive"; } else { - _genericMessages pushback "STR_ACE_MEDICAL_diagnoseDead"; + _genericMessages pushback "STR_ACE_Medical_diagnoseDead"; }; -if (_target getvariable[QGVAR(hasLostBlood), false]) then { - _genericMessages pushback "STR_ACE_MEDICAL_lostBlood"; +if (_target getvariable[QGVAR(hasLostBlood), 0] > 0) then { + if (_target getvariable[QGVAR(hasLostBlood), 0] > 1) then { + _genericMessages pushback "STR_ACE_Medical_lostBloodALot"; + } else { + _genericMessages pushback "STR_ACE_Medical_lostBlood"; + }; } else { - _genericMessages pushback "STR_ACE_MEDICAL_noBloodloss"; + _genericMessages pushback "STR_ACE_Medical_noBloodloss"; }; if (_target getvariable[QGVAR(hasPain), false]) then { - _genericMessages pushback "STR_ACE_MEDICAL_inPain"; + _genericMessages pushback "STR_ACE_Medical_inPain"; } else { - _genericMessages pushback "STR_ACE_MEDICAL_noPain"; + _genericMessages pushback "STR_ACE_Medical_noPain"; }; ["displayTextStructured", [_caller], [_genericMessages, 3.0, _caller]] call EFUNC(common,targetEvent); diff --git a/addons/medical/functions/fnc_actionLoadUnit.sqf b/addons/medical/functions/fnc_actionLoadUnit.sqf index 990467521a..03d9a3ef54 100644 --- a/addons/medical/functions/fnc_actionLoadUnit.sqf +++ b/addons/medical/functions/fnc_actionLoadUnit.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" -private ["_caller", "_target","_vehicle", "_loaded"]; +private ["_caller", "_target","_vehicle"]; _caller = _this select 0; _target = _this select 1; @@ -23,16 +23,10 @@ if ([_target] call EFUNC(common,isAwake)) exitwith { ["displayTextStructured", [_caller], [["This person (%1) is awake and cannot be loaded", [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent); }; if ([_target] call FUNC(isBeingCarried)) then { - [_caller, _target] call FUNC(dropObject_carry); + [_caller, _target] call EFUNC(dragging,dropObject_carry); }; if ([_target] call FUNC(isBeingDragged)) then { - [_caller, _target] call FUNC(dropObject); + [_caller, _target] call EFUNC(dragging,dropObject); }; _vehicle = [_caller, _target] call EFUNC(common,loadPerson); -if (!isNull _vehicle) then { - if (!isnil QGVAR(DROP_ADDACTION)) then { - _caller removeAction GVAR(DROP_ADDACTION); - GVAR(DROP_ADDACTION) = nil; - }; -}; diff --git a/addons/medical/functions/fnc_actionRemoveTourniquet.sqf b/addons/medical/functions/fnc_actionRemoveTourniquet.sqf index 2eafe36732..a14dbc3bcd 100644 --- a/addons/medical/functions/fnc_actionRemoveTourniquet.sqf +++ b/addons/medical/functions/fnc_actionRemoveTourniquet.sqf @@ -15,7 +15,7 @@ #include "script_component.hpp" -private ["_caller","_target","_part","_selectionName","_removeItem","_tourniquets", "_output"]; +private ["_caller", "_target", "_part", "_selectionName", "_tourniquets", "_output"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; diff --git a/addons/medical/functions/fnc_actionUnloadUnit.sqf b/addons/medical/functions/fnc_actionUnloadUnit.sqf index 8c05a43fc9..bb66147f2a 100644 --- a/addons/medical/functions/fnc_actionUnloadUnit.sqf +++ b/addons/medical/functions/fnc_actionUnloadUnit.sqf @@ -15,7 +15,7 @@ #include "script_component.hpp" -private ["_caller", "_target","_vehicle", "_drag", "_handle"]; +private ["_caller", "_target", "_drag"]; _caller = _this select 0; _target = _this select 1; _drag = if (count _this > 2) then {_this select 2} else {false}; @@ -24,7 +24,7 @@ _drag = if (count _this > 2) then {_this select 2} else {false}; if (vehicle _target == _target) exitwith {}; if (([_target] call cse_fnc_isAwake)) exitwith {}; -if ([_caller, _target] call EFUNC(common,unloadPerson)) then { +if ([_target] call EFUNC(common,unloadPerson)) then { if (_drag) then { if ((vehicle _caller) == _caller) then { [[_caller, _target, true], QUOTE(DFUNC(actionDragUnit)), _caller, false] call EFUNC(common,execRemoteFnc); // TODO replace by event diff --git a/addons/medical/functions/fnc_addToInjuredCollection.sqf b/addons/medical/functions/fnc_addToInjuredCollection.sqf index cbe146d701..c95db059df 100644 --- a/addons/medical/functions/fnc_addToInjuredCollection.sqf +++ b/addons/medical/functions/fnc_addToInjuredCollection.sqf @@ -13,7 +13,7 @@ #include "script_component.hpp" -private "_unit"; +private ["_unit", "_force"]; _unit = _this select 0; _force = if (count _this > 1) then {_this select 1} else {false}; diff --git a/addons/medical/functions/fnc_addToLog.sqf b/addons/medical/functions/fnc_addToLog.sqf index c36d57b482..46bacf2349 100644 --- a/addons/medical/functions/fnc_addToLog.sqf +++ b/addons/medical/functions/fnc_addToLog.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" -private ["_unit", "_type", "_message", "_arguments", "_lastNumber", "_moment", "_logVarName", "_log","_newLog"]; +private ["_unit", "_type", "_message", "_arguments", "_lastNumber", "_moment", "_logVarName", "_log","_newLog", "_logs"]; _unit = _this select 0; _type = _this select 1; _message = _this select 2; diff --git a/addons/medical/functions/fnc_addToTriageCard.sqf b/addons/medical/functions/fnc_addToTriageCard.sqf index 49e642cfc4..61add24cfc 100644 --- a/addons/medical/functions/fnc_addToTriageCard.sqf +++ b/addons/medical/functions/fnc_addToTriageCard.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" -private ["_unit","_caller","_newItem","_log", "_inList","_amount"]; +private ["_unit", "_newItem", "_log", "_inList", "_amount"]; _unit = _this select 0; _newItem = _this select 1; diff --git a/addons/medical/functions/fnc_addUnloadPatientActions.sqf b/addons/medical/functions/fnc_addUnloadPatientActions.sqf index c792746d47..13a4177859 100644 --- a/addons/medical/functions/fnc_addUnloadPatientActions.sqf +++ b/addons/medical/functions/fnc_addUnloadPatientActions.sqf @@ -16,7 +16,7 @@ EXPLODE_3_PVT(_this,_vehicle,_player,_parameters); -private ["_actions"]; +private ["_actions", "_unit"]; _actions = []; { diff --git a/addons/medical/functions/fnc_canTreat.sqf b/addons/medical/functions/fnc_canTreat.sqf index 5f52759f54..062a696fcd 100644 --- a/addons/medical/functions/fnc_canTreat.sqf +++ b/addons/medical/functions/fnc_canTreat.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_config", "_availableLevels", "_medicRequired", "_items", "_locations", "_return", "_condition"]; +private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; diff --git a/addons/medical/functions/fnc_copyDeadBody.sqf b/addons/medical/functions/fnc_copyDeadBody.sqf index 8e476b8662..36bcd91487 100644 --- a/addons/medical/functions/fnc_copyDeadBody.sqf +++ b/addons/medical/functions/fnc_copyDeadBody.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" -private ["_oldBody","_newUnit","_class","_group","_position","_side","_allVariables"]; +private ["_oldBody","_newUnit","_class","_group","_position","_side", "_caller", "_name"]; _oldBody = _this select 0; _caller = _this select 1; diff --git a/addons/medical/functions/fnc_createLitter.sqf b/addons/medical/functions/fnc_createLitter.sqf index 5299fbb244..8682cc24d5 100644 --- a/addons/medical/functions/fnc_createLitter.sqf +++ b/addons/medical/functions/fnc_createLitter.sqf @@ -16,7 +16,7 @@ #define MIN_ENTRIES_LITTER_CONFIG 3 -private ["_target", "_className", "_config", "_litter", "_createLitter", "_litterObject", "_position", "_createdLitter"]; +private ["_target", "_className", "_config", "_litter", "_createLitter", "_position", "_createdLitter", "_caller", "_selectionName", "_usersOfItems"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; @@ -46,11 +46,11 @@ _createLitter = { _position = [(_position select 0) - random 2, (_position select 1) - random 2, _position select 2]; }; _direction = (random 360); - + // Create the litter, and timeout the event based on the cleanup delay - // The cleanup delay for events in MP is handled by the server side + // The cleanup delay for events in MP is handled by the server side [QGVAR(createLitter), [_litterClass,_position,_direction], 0] call EFUNC(common,syncedEvent); - + true }; @@ -68,6 +68,7 @@ _createdLitter = []; _litterCondition = if (_litterCondition != "") then {compile _litterCondition} else {{true}}; } else { _litterCondition = missionNamespace getvariable _litterCondition; + if (typeName _litterCondition != "CODE") then {_litterCondition = {false}}; }; if !([_caller, _target, _selectionName, _className, _usersOfItems] call _litterCondition) exitwith {}; diff --git a/addons/medical/functions/fnc_determineIfFatal.sqf b/addons/medical/functions/fnc_determineIfFatal.sqf index aedcf161ee..bad15dbcad 100644 --- a/addons/medical/functions/fnc_determineIfFatal.sqf +++ b/addons/medical/functions/fnc_determineIfFatal.sqf @@ -10,7 +10,7 @@ #include "script_component.hpp" -private ["_unit","_part","_damageThreshold", "_withDamage"]; +private ["_unit","_part","_damageThreshold", "_withDamage", "_damageBodyPart"]; _unit = _this select 0; _part = _this select 1; _withDamage = if (count _this > 2) then { _this select 2} else {0}; diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index 1fc1051efa..c5c5d23a01 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -16,7 +16,7 @@ // Exit for basic medical if (GVAR(level) < 2) exitWith {}; -private ["_target", "_show", "_selectionN"]; +private ["_target", "_show", "_selectionN", "_amountOfGeneric", "_bandagedwounds", "_logCtrl", "_part", "_partText", "_pointDamage", "_severity", "_total", "_totalIvVolume", "_triageStatus", "_type"]; _target = _this select 0; _show = if (count _this > 1) then {_this select 1} else {true}; _selectionN = if (count _this > 2) then {_this select 2} else {0}; @@ -55,17 +55,17 @@ if (_show) then { }; if (_target getvariable[QGVAR(isBleeding), false]) then { - _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_BLEEDING", [1, 0.1, 0.1, 1]]; + _genericMessages pushback [localize "STR_ACE_Medical_Status_Bleeding", [1, 0.1, 0.1, 1]]; }; - if (_target getvariable[QGVAR(hasLostBlood), false]) then { - _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_LOST_BLOOD", [1, 0.1, 0.1, 1]]; + if (_target getvariable[QGVAR(hasLostBlood), 0] > 1) then { + _genericMessages pushback [localize "STR_ACE_Medical_Status_Lost_Blood", [1, 0.1, 0.1, 1]]; }; if (((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select _selectionN) > 0) then { - _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_TOURNIQUET_APPLIED", [0.77, 0.51, 0.08, 1]]; + _genericMessages pushback [localize "STR_ACE_Medical_Status_Tourniquet_Applied", [0.77, 0.51, 0.08, 1]]; }; if (_target getvariable[QGVAR(hasPain), false]) then { - _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_PAIN", [1, 1, 1, 1]]; + _genericMessages pushback [localize "STR_ACE_Medical_Status_Pain", [1, 1, 1, 1]]; }; _totalIvVolume = 0; @@ -77,7 +77,7 @@ if (_show) then { }; }foreach GVAR(IVBags); if (_totalIvVolume >= 1) then { - _genericMessages pushback [format[localize "STR_ACE_MEDICAL_receivingIvVolume", floor _totalIvVolume], [1, 1, 1, 1]]; + _genericMessages pushback [format[localize "STR_ACE_Medical_receivingIvVolume", floor _totalIvVolume], [1, 1, 1, 1]]; }; _damaged = [false, false, false, false, false, false]; @@ -192,7 +192,7 @@ if (_show) then { _logCtrl = (_display displayCtrl 302); lbClear _logCtrl; - private ["_logs", "_log", "_message", "_moment", "_arguments", "_lbCtrl"]; + private ["_logs", "_message", "_moment", "_arguments", "_lbCtrl"]; _logs = _target getvariable [QGVAR(logFile_Activity), []]; { // [_message,_moment,_type, _arguments] diff --git a/addons/medical/functions/fnc_displayTriageCard.sqf b/addons/medical/functions/fnc_displayTriageCard.sqf index 8e9660a3d5..a9054dac46 100644 --- a/addons/medical/functions/fnc_displayTriageCard.sqf +++ b/addons/medical/functions/fnc_displayTriageCard.sqf @@ -13,7 +13,7 @@ #include "script_component.hpp" -private ["_target", "_show"]; +private ["_target", "_show", "_amount", "_item", "_log", "_message", "_triageCardTexts", "_triageStatus"]; _target = _this select 0; _show = if (count _this > 1) then {_this select 1} else {true}; @@ -24,7 +24,7 @@ if (_show) then { createDialog QGVAR(triageCard); [{ - private ["_target", "_display", "_alphaLevel", "_damaged", "_availableSelections", "_openWounds", "_selectionBloodLoss", "_red", "_green", "_blue", "_alphaLevel", "_allInjuryTexts", "_lbCtrl", "_genericMessages"]; + private ["_target", "_display", "_alphaLevel", "_alphaLevel", "_lbCtrl"]; _target = (_this select 0) select 0; if (GVAR(TriageCardTarget) != _target) exitwith { [_this select 1] call CBA_fnc_removePerFrameHandler; @@ -58,7 +58,7 @@ if (_show) then { }foreach _log; if (count _triageCardTexts == 0) then { - _lbCtrl lbAdd (localize "STR_ACE_MEDICAL_TriageCard_NoEntry"); + _lbCtrl lbAdd (localize "STR_ACE_Medical_TriageCard_NoEntry"); }; { _lbCtrl lbAdd _x; diff --git a/addons/medical/functions/fnc_dropDownTriageCard.sqf b/addons/medical/functions/fnc_dropDownTriageCard.sqf index 6ea910b7af..6f30152c5f 100644 --- a/addons/medical/functions/fnc_dropDownTriageCard.sqf +++ b/addons/medical/functions/fnc_dropDownTriageCard.sqf @@ -13,7 +13,7 @@ #include "script_component.hpp" -private ["_show"]; +private ["_show", "_ctrl", "_display", "_idc", "_pos"]; _show = _this select 0; disableSerialization; diff --git a/addons/medical/functions/fnc_getBloodLoss.sqf b/addons/medical/functions/fnc_getBloodLoss.sqf index f6b26f7686..1881643d97 100644 --- a/addons/medical/functions/fnc_getBloodLoss.sqf +++ b/addons/medical/functions/fnc_getBloodLoss.sqf @@ -15,15 +15,17 @@ #define BLOODLOSSRATE_BASIC 0.2 -private ["_totalBloodLoss","_tourniquets","_openWounds", "_value", "_cardiacOutput", "_internalWounds"]; +private ["_unit", "_totalBloodLoss","_tourniquets","_openWounds", "_cardiacOutput", "_internalWounds"]; // TODO Only use this calculation if medium or higher, otherwise use vanilla calculations (for basic medical). + +_unit = _this select 0; _totalBloodLoss = 0; // Advanced medical bloodloss handling if (GVAR(level) >= 2) then { - _tourniquets = _this getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; - _openWounds = _this getvariable [QGVAR(openWounds), []]; - //_cardiacOutput = [_this] call FUNC(getCardiacOutput); + _tourniquets = _unit getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; + _openWounds = _unit getvariable [QGVAR(openWounds), []]; + //_cardiacOutput = [_unit] call FUNC(getCardiacOutput); { if ((_tourniquets select (_x select 2)) == 0) then { @@ -34,7 +36,7 @@ if (GVAR(level) >= 2) then { }; }foreach _openWounds; - _internalWounds = _this getvariable [QGVAR(internalWounds), []]; + _internalWounds = _unit getvariable [QGVAR(internalWounds), []]; { _totalBloodLoss = _totalBloodLoss + ((_x select 4) * (_x select 3)); }foreach _internalWounds; @@ -42,6 +44,6 @@ if (GVAR(level) >= 2) then { // cap the blood loss to be no greater as the current cardiac output //(_totalBloodLoss min _cardiacOutput); } else { - _totalBloodLoss = BLOODLOSSRATE_BASIC * (damage _this); + _totalBloodLoss = BLOODLOSSRATE_BASIC * (damage _unit); }; -_totalBloodLoss * (GVAR(bleedingCoefficient) max 0); +_totalBloodLoss * ((_unit getVariable [QGVAR(bleedingCoefficient), GVAR(bleedingCoefficient)]) max 0); diff --git a/addons/medical/functions/fnc_getBloodVolumeChange.sqf b/addons/medical/functions/fnc_getBloodVolumeChange.sqf index f94c5d5b7b..23eba4a0c7 100644 --- a/addons/medical/functions/fnc_getBloodVolumeChange.sqf +++ b/addons/medical/functions/fnc_getBloodVolumeChange.sqf @@ -34,7 +34,7 @@ private ["_unit","_bloodVolume","_bloodVolumeChange", "_ivVolume"]; _unit = _this select 0; _bloodVolume = _unit getvariable [QGVAR(bloodVolume), 100]; -_bloodVolumeChange = -(_unit call FUNC(getBloodLoss)); +_bloodVolumeChange = -([_unit] call FUNC(getBloodLoss)); if (_bloodVolume < 100.0) then { { diff --git a/addons/medical/functions/fnc_getHeartRateChange.sqf b/addons/medical/functions/fnc_getHeartRateChange.sqf index e7bc9407d2..92a2053737 100644 --- a/addons/medical/functions/fnc_getHeartRateChange.sqf +++ b/addons/medical/functions/fnc_getHeartRateChange.sqf @@ -15,12 +15,12 @@ #define HEART_RATE_MODIFIER 0.02 -private ["_unit", "_heartRate", "_hrIncrease", "_bloodLoss", "_time", "_values", "_adjustment", "_adjustments", "_additionalIncrease", "_change", "_callBack", "_bloodVolume"]; +private ["_unit", "_heartRate", "_hrIncrease", "_bloodLoss", "_time", "_values", "_adjustment", "_change", "_callBack", "_bloodVolume"]; _unit = _this select 0; _hrIncrease = 0; if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { _heartRate = _unit getvariable [QGVAR(heartRate), 80]; - _bloodLoss = _unit call FUNC(getBloodLoss); + _bloodLoss = [_unit] call FUNC(getBloodLoss); _adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []]; { @@ -83,4 +83,4 @@ if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { _hrIncrease = _hrIncrease - HEART_RATE_MODIFIER; }; }; -_hrIncrease \ No newline at end of file +_hrIncrease diff --git a/addons/medical/functions/fnc_getTriageStatus.sqf b/addons/medical/functions/fnc_getTriageStatus.sqf index d80cbe5d64..aaeec2d516 100644 --- a/addons/medical/functions/fnc_getTriageStatus.sqf +++ b/addons/medical/functions/fnc_getTriageStatus.sqf @@ -17,10 +17,10 @@ private ["_unit","_return","_status"]; _unit = _this select 0; _status = _unit getvariable [QGVAR(triageLevel), -1]; _return = switch (_status) do { - case 1: {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_MINOR", 1, [0, 0.5, 0, 0.9]]}; - case 2: {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_DELAYED", 2, [0.7, 0.5, 0, 0.9]]}; - case 3: {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_IMMEDIATE", 3, [0.4, 0.07, 0.07, 0.9]]}; - case 4: {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_DECEASED", 4, [0, 0, 0, 0.9]]}; - default {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_NONE", 0, [0, 0, 0, 0.9]]}; + case 1: {[localize "STR_ACE_Medical_Triage_Status_Minor", 1, [0, 0.5, 0, 0.9]]}; + case 2: {[localize "STR_ACE_Medical_Triage_Status_Delayed", 2, [0.7, 0.5, 0, 0.9]]}; + case 3: {[localize "STR_ACE_Medical_Triage_Status_Immediate", 3, [0.4, 0.07, 0.07, 0.9]]}; + case 4: {[localize "STR_ACE_Medical_Triage_Status_Deceased", 4, [0, 0, 0, 0.9]]}; + default {[localize "STR_ACE_Medical_Triage_Status_None", 0, [0, 0, 0, 0.9]]}; }; _return; diff --git a/addons/medical/functions/fnc_handleBandageOpening.sqf b/addons/medical/functions/fnc_handleBandageOpening.sqf index 21211c9c1b..a92bf9029c 100644 --- a/addons/medical/functions/fnc_handleBandageOpening.sqf +++ b/addons/medical/functions/fnc_handleBandageOpening.sqf @@ -18,7 +18,7 @@ #include "script_component.hpp" -private ["_target", "_impact", "_part", "_injuryIndex", "_injury", "_bandage", "_classID", "_className", "_reopeningChance", "_reopeningMinDelay", "_reopeningMaxDelay", "_config", "_woundTreatmentConfig", "_bandagedWounds", "_exist", "_injuryId", "_existingInjury", "_delay", "_openWounds", "_selectedInjury"]; +private ["_target", "_impact", "_part", "_injuryIndex", "_injury", "_bandage", "_classID", "_className", "_reopeningChance", "_reopeningMinDelay", "_reopeningMaxDelay", "_config", "_woundTreatmentConfig", "_bandagedWounds", "_exist", "_injuryId", "_existingInjury", "_delay", "_openWounds", "_selectedInjury", "_bandagedInjury"]; _target = _this select 0; _impact = _this select 1; _part = _this select 2; diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf index ee7e591cd1..617d05e519 100644 --- a/addons/medical/functions/fnc_handleCreateLitter.sqf +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -5,6 +5,7 @@ if(!hasInterface) exitWith { false }; PARAMS_3(_litterClass,_position,_direction); private["_litterObject", "_maxLitterCount"]; +//IGNORE_PRIVATE_WARNING(_values); if (isNil QGVAR(allCreatedLitter)) then { GVAR(allCreatedLitter) = []; diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index c13818bbcd..1d8c821d1f 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -17,12 +17,12 @@ #include "script_component.hpp" -private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_typeOfDamage"]; -_unit = _this select 0; -_selection = _this select 1; -_damage = _this select 2; -_shooter = _this select 3; -_projectile = _this select 4; +private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_typeOfDamage", "_minLethalDamage", "_newDamage", "_typeIndex", "_preventDeath"]; +_unit = _this select 0; +_selection = _this select 1; +_damage = _this select 2; +_shooter = _this select 3; +_projectile = _this select 4; if !(local _unit) exitWith {nil}; @@ -34,56 +34,93 @@ if (typeName _projectile == "OBJECT") then { // If the damage is being weird, we just tell it to fuck off. if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0}; +// Exit if we disable damage temporarily +_damageOld = damage _unit; +if (_selection in GVAR(SELECTIONS)) then { + _damageOld = _unit getHit _selection; +}; +if !(_unit getVariable [QGVAR(allowDamage), true]) exitWith {_damageOld}; + +// Figure out whether to prevent death before handling damage +if (diag_frameno > (_unit getVariable [QGVAR(frameNo), -3]) + 2) then { + _unit setVariable [QGVAR(frameNo), diag_frameno]; + _unit setVariable [QGVAR(wasUnconscious), _unit getVariable ["ACE_isUnconscious", false]]; + + _preventDeath = _unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]; + if (_unit getVariable ["ACE_isUnconscious", false]) then { + _preventDeath = _unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]; + if !([_unit] call EFUNC(common,isPlayer)) then { + _preventDeath = _preventDeath - 1; + }; + _preventDeath = _preventDeath > 0; + }; + _unit setVariable [QGVAR(preventDeath), _preventDeath]; +}; + +// Get return damage _damageReturn = _damage; if (GVAR(level) < 2) then { _damageReturn = _this call FUNC(handleDamage_basic); -}; - -if (GVAR(level) >= 2) then { +} else { if !([_unit] call FUNC(hasMedicalEnabled)) exitwith { // Because of the config changes, we cannot properly disable the medical system for a unit. // lets use basic for the time being.. _damageReturn = _this call FUNC(handleDamage_basic); }; _newDamage = _this call FUNC(handleDamage_caching); + _typeOfDamage = [_projectile] call FUNC(getTypeOfDamage); - if (_damageReturn > 0.9) then { + _typeIndex = (GVAR(allAvailableDamageTypes) find _typeOfDamage); + _minLethalDamage = 0.01; + if (_typeIndex >= 0) then { + _minLethalDamage = GVAR(minLethalDamages) select _typeIndex; + }; - _typeOfDamage = [_projectile] call FUNC(getTypeOfDamage); - - _typeIndex = (GVAR(allAvailableDamageTypes) find _typeOfDamage); - _minLethalDamage = 0.01; - if (_typeIndex >= 0) then { - _minLethalDamage = GVAR(minLethalDamages) select _typeIndex; + if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _shooter} && {_projectile == ""} && {_selection == ""}) then { + if (GVAR(enableVehicleCrashes)) then { + _selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS)))); }; + }; - if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selection == ""}) then { - if (GVAR(enableVehicleCrashes)) then { - _selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS)))); - }; + if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)} || !alive vehicle _unit) then { + if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith { + _damageReturn = 0.9; }; - - if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)} && {_selection in ["", "head", "body"]}) then { - if ([_unit] call FUNC(setDead)) then { - _damageReturn = 1; - } else { - _damageReturn = 0.89; - }; + if ([_unit] call FUNC(setDead)) then { + _damageReturn = 1; } else { - _damageReturn = 0.89; + _damageReturn = _damageReturn min 0.89; }; + } else { + _damageReturn = _damageReturn min 0.89; }; }; [_unit] call FUNC(addToInjuredCollection); -if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) && {_damageReturn >= 0.9} && {_selection in ["", "head", "body"]}) exitWith { - if (vehicle _unit != _unit and {damage _vehicle >= 1}) then { - // @todo - // [_unit] call FUNC(unload); +// Prevent death if necessary +if (_unit getVariable QGVAR(preventDeath)) then { + if (_selection in ["", "head", "body"]) then { + _damageReturn = _damageReturn min 0.89; }; - [_unit] call FUNC(setDead); - 0.89 + // Move the unit out of the vehicle if necessary + if (vehicle _unit != _unit and damage (vehicle _unit) == 1) then { + [_unit] call EFUNC(common,unloadPerson); + if (_unit getVariable QGVAR(wasUnconscious)) then { + [_unit] call FUNC(setDead); + } else { + [_unit, true] call FUNC(setUnconscious); + }; + }; + + // Temporarily disable all damage to prevent stuff like + // being killed during the animation etc. + if (!_wasUnconscious and (_unit getVariable ["ACE_isUnconscious", false])) then { + _unit setVariable [QGVAR(allowDamage), false]; + [{ + _this setVariable [QGVAR(allowDamage), true]; + }, _unit, 0.7, 0] call EFUNC(common,waitAndExecute); + }; }; _damageReturn diff --git a/addons/medical/functions/fnc_handleDamage_basic.sqf b/addons/medical/functions/fnc_handleDamage_basic.sqf index aa9c2f61df..7b308ad188 100644 --- a/addons/medical/functions/fnc_handleDamage_basic.sqf +++ b/addons/medical/functions/fnc_handleDamage_basic.sqf @@ -24,24 +24,30 @@ #define ARMDAMAGETRESHOLD2 1.7 #define UNCONSCIOUSNESSTRESHOLD 0.7 -private ["_unit", "_selectionName", "_damage", "_shooter", "_projectile", "_damage"]; +private ["_unit", "_selectionName", "_damage", "_shooter", "_projectile", "_damage", "_armdamage", "_hitPoint", "_index", "_legdamage", "_newDamage", "_otherDamage", "_pain", "_restore"]; -_unit = _this select 0; -_selectionName = _this select 1; -_damage = _this select 2; -_shooter = _this select 3; -_projectile = _this select 4; +_unit = _this select 0; +_selectionName = _this select 1; +_damage = _this select 2; +_shooter = _this select 3; +_projectile = _this select 4; + +// Apply damage treshold / coefficient +_threshold = [ + _unit getVariable [QGVAR(damageThreshold), GVAR(AIDamageThreshold)], + _unit getVariable [QGVAR(damageThreshold), GVAR(playerDamageThreshold)] +] select ([_unit] call EFUNC(common,isPlayer)); +_damage = _damage * (1 / _threshold); // This is a new hit, reset variables. // Note: sometimes handleDamage spans over 2 or even 3 frames. -if (diag_frameno > (_unit getVariable [QGVAR(frameNo), -3]) + 2) then { - _unit setVariable [QGVAR(frameNo), diag_frameno]; +if (diag_frameno > (_unit getVariable [QGVAR(basic_frameNo), -3]) + 2) then { + _unit setVariable [QGVAR(basic_frameNo), diag_frameno]; _unit setVariable [QGVAR(isFalling), false]; _unit setVariable [QGVAR(projectiles), []]; _unit setVariable [QGVAR(hitPoints), []]; _unit setVariable [QGVAR(damages), []]; _unit setVariable [QGVAR(structDamage), 0]; - _unit setVariable [QGVAR(preventDeath), false]; // Assign orphan structural damage to torso [{ private ["_unit", "_damagesum"]; @@ -172,11 +178,7 @@ if (_selectionName == "" and _damage < 1 and !(_unit getVariable ["ACE_isUnconscious", False] )) then { - if (_unit getVariable [QGVAR(allowUnconscious), ([_unit] call EFUNC(common,isPlayer)) or random 1 > 0.3]) then { - [_unit, true] call FUNC(setUnconscious); - } else { - _damage = 1; - }; + [_unit, true] call FUNC(setUnconscious); }; _damage diff --git a/addons/medical/functions/fnc_handleDamage_wounds.sqf b/addons/medical/functions/fnc_handleDamage_wounds.sqf index b45a974166..9172304dd2 100644 --- a/addons/medical/functions/fnc_handleDamage_wounds.sqf +++ b/addons/medical/functions/fnc_handleDamage_wounds.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage", "_bodyPartn", "_woundType", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd"]; +private ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage", "_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"]; _unit = _this select 0; _selectionName = _this select 1; _damage = _this select 2; diff --git a/addons/medical/functions/fnc_handleKilled.sqf b/addons/medical/functions/fnc_handleKilled.sqf index ce0f087836..5003ec189c 100644 --- a/addons/medical/functions/fnc_handleKilled.sqf +++ b/addons/medical/functions/fnc_handleKilled.sqf @@ -13,7 +13,7 @@ #include "script_component.hpp" -private["_unit"]; +private["_unit", "_openWounds"]; _unit = _this select 0; if (!local _unit) exitwith {}; diff --git a/addons/medical/functions/fnc_handleLocal.sqf b/addons/medical/functions/fnc_handleLocal.sqf index f79c1c3a6d..216fb8ed49 100644 --- a/addons/medical/functions/fnc_handleLocal.sqf +++ b/addons/medical/functions/fnc_handleLocal.sqf @@ -23,10 +23,10 @@ if (_local) then { [_unit, true] call FUNC(addToInjuredCollection); }; - if ((_unit getvariable ["ACE_isUnconscious",false]) && {count (_unit getvariable [QGVAR(unconsciousArguments), []]) >= 7}) then { + if ((_unit getvariable ["ACE_isUnconscious",false]) && {count (_unit getvariable [QGVAR(unconsciousArguments), []]) >= 6}) then { private "_arguments"; _arguments = (_unit getvariable [QGVAR(unconsciousArguments), []]); - _arguments set [ 3, time]; + _arguments set [2, time]; [DFUNC(unconsciousPFH), 0.1, _arguments ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 411f64b49e..ebfb8be746 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -13,7 +13,7 @@ #include "script_component.hpp" -private ["_unit", "_heartRate","_bloodPressure","_bloodVolume","_painStatus", "_lastTimeValuesSynced", "_syncValues"]; +private ["_unit", "_heartRate","_bloodPressure","_bloodVolume","_painStatus", "_lastTimeValuesSynced", "_syncValues", "_airwayStatus", "_blood", "_bloodPressureH", "_bloodPressureL", "_interval"]; _unit = _this select 0; _interval = time - (_unit getVariable [QGVAR(lastMomentVitalsHandled), 0]); @@ -33,17 +33,23 @@ _bloodVolume = _bloodVolume max 0; _unit setvariable [QGVAR(bloodVolume), _bloodVolume, _syncValues]; // Set variables for synchronizing information across the net -if (_bloodVolume < 90) then { - if !(_unit getvariable [QGVAR(hasLostBlood), false]) then { - _unit setvariable [QGVAR(hasLostBlood), true, true]; - }; +if (_bloodVolume < 100) then { + if ((_bloodVolume < 90 && (GVAR(level) == 2)) || _bloodVolume <= 45) then { + if (_unit getvariable [QGVAR(hasLostBlood), 0] != 2) then { + _unit setvariable [QGVAR(hasLostBlood), 2, true]; + }; + } else { + if (_unit getvariable [QGVAR(hasLostBlood), 0] != 1) then { + _unit setvariable [QGVAR(hasLostBlood), 1, true]; + }; + } } else { - if (_unit getvariable [QGVAR(hasLostBlood),false]) then { - _unit setvariable [QGVAR(hasLostBlood), false, true]; + if (_unit getvariable [QGVAR(hasLostBlood), 0] != 0) then { + _unit setvariable [QGVAR(hasLostBlood), 0, true]; }; }; -if ((_unit call FUNC(getBloodLoss)) > 0) then { +if (([_unit] call FUNC(getBloodLoss)) > 0) then { if !(_unit getvariable [QGVAR(isBleeding), false]) then { _unit setvariable [QGVAR(isBleeding), true, true]; }; @@ -66,13 +72,13 @@ if (_painStatus > 0) then { if (GVAR(level) == 1) then { // reduce pain - if (_unit getVariable [QGVAR(pain), 0] > 0) then { - _unit setVariable [QGVAR(pain), ((_unit getVariable QGVAR(pain)) - 0.001 * _interval) max 0, _syncValues]; + if (_painStatus > 0) then { + _unit setVariable [QGVAR(pain), (_painStatus - 0.001 * _interval) max 0, _syncValues]; }; // reduce painkillers if (_unit getVariable [QGVAR(morphine), 0] > 0) then { - _unit setVariable [QGVAR(morphine), ((_unit getVariable QGVAR(morphine)) - 0.0015 * _interval) max 0, _syncValues]; + _unit setVariable [QGVAR(morphine), ((_unit getVariable [QGVAR(morphine), 0]) - 0.0015 * _interval) max 0, _syncValues]; }; // bleeding diff --git a/addons/medical/functions/fnc_hasItem.sqf b/addons/medical/functions/fnc_hasItem.sqf index 551d532ae4..cfec633b55 100644 --- a/addons/medical/functions/fnc_hasItem.sqf +++ b/addons/medical/functions/fnc_hasItem.sqf @@ -15,7 +15,7 @@ #include "script_component.hpp" -private ["_medic", "_patient", "_item", "_return"]; +private ["_medic", "_patient", "_item", "_return", "_crew"]; _medic = _this select 0; _patient = _this select 1; _item = _this select 2; diff --git a/addons/medical/functions/fnc_hasMedicalEnabled.sqf b/addons/medical/functions/fnc_hasMedicalEnabled.sqf index ee433c1715..fb5a45fe70 100644 --- a/addons/medical/functions/fnc_hasMedicalEnabled.sqf +++ b/addons/medical/functions/fnc_hasMedicalEnabled.sqf @@ -15,7 +15,7 @@ _unit = _this select 0; _medicalEnabled = _unit getvariable QGVAR(enableMedical); if (isnil "_medicalEnabled") exitwith { - (((GVAR(enabledFor) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enabledFor) == 1)); + (((GVAR(enableFor) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enableFor) == 1)); }; _medicalEnabled; diff --git a/addons/medical/functions/fnc_init.sqf b/addons/medical/functions/fnc_init.sqf index d01a63b3a5..0ec6ce3ce2 100644 --- a/addons/medical/functions/fnc_init.sqf +++ b/addons/medical/functions/fnc_init.sqf @@ -13,7 +13,7 @@ #include "script_component.hpp" -private ["_unit", "_allUsedMedication", "_logs", "_forceNew"]; +private ["_unit", "_allUsedMedication", "_logs"]; _unit = _this select 0; @@ -60,7 +60,7 @@ _unit setvariable [QGVAR(airwayCollapsed), false]; _unit setvariable [QGVAR(addedToUnitLoop), false, true]; _unit setvariable [QGVAR(inCardiacArrest), false, true]; _unit setVariable ["ACE_isUnconscious", false, true]; -_unit setvariable [QGVAR(hasLostBlood), false, true]; +_unit setvariable [QGVAR(hasLostBlood), 0, true]; _unit setvariable [QGVAR(isBleeding), false, true]; _unit setvariable [QGVAR(hasPain), false, true]; _unit setvariable [QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives), true]; diff --git a/addons/medical/functions/fnc_isInMedicalVehicle.sqf b/addons/medical/functions/fnc_isInMedicalVehicle.sqf index cffc24410d..5422ce8e1f 100644 --- a/addons/medical/functions/fnc_isInMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isInMedicalVehicle.sqf @@ -21,4 +21,4 @@ _vehicle = vehicle _unit; if (_unit == _vehicle) exitWith {false}; if (_unit in [driver _vehicle, gunner _vehicle, commander _vehicle]) exitWith {false}; -_vehicle getVariable [QGVAR(isMedic), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant") == 1] +_vehicle getVariable [QGVAR(medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant") == 1] diff --git a/addons/medical/functions/fnc_isMedic.sqf b/addons/medical/functions/fnc_isMedic.sqf index cc07948f4b..122d261238 100644 --- a/addons/medical/functions/fnc_isMedic.sqf +++ b/addons/medical/functions/fnc_isMedic.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" -private ["_unit","_class","_return"]; +private ["_unit", "_class", "_medicN"]; _unit = _this select 0; _medicN = if (count _this > 1) then {_this select 1} else {1}; diff --git a/addons/medical/functions/fnc_isMedicalVehicle.sqf b/addons/medical/functions/fnc_isMedicalVehicle.sqf index 7be406e556..5e9283852f 100644 --- a/addons/medical/functions/fnc_isMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isMedicalVehicle.sqf @@ -15,4 +15,4 @@ private ["_vehicle"]; _vehicle = _this select 0; -_vehicle getVariable [QGVAR(isMedic), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant") == 1] +(_vehicle getVariable [QGVAR(medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant")]) > 0 diff --git a/addons/medical/functions/fnc_modifyMedicalAction.sqf b/addons/medical/functions/fnc_modifyMedicalAction.sqf index 66398a2590..179ae9eb83 100644 --- a/addons/medical/functions/fnc_modifyMedicalAction.sqf +++ b/addons/medical/functions/fnc_modifyMedicalAction.sqf @@ -19,15 +19,15 @@ EXPLODE_4_PVT(_this,_target,_player,_selectionN,_actionData); if (GVAR(level) < 2) exitwith { - private ["_pointDamage"]; - _pointDamage = _target getHitPointDamage (["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] select _selectionN); + private ["_pointDamage"]; + _pointDamage = _target getHitPointDamage (["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] select _selectionN); - if (_pointDamage >= 0.8) exitWith { - _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; - }; - if (_pointDamage > 0) exitWith { - _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossYellow.paa))]; - }; + if (_pointDamage >= 0.8) exitWith { + _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; + }; + if (_pointDamage > 0) exitWith { + _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossYellow.paa))]; + }; }; private ["_openWounds", "_amountOf"]; @@ -35,6 +35,6 @@ _openWounds = _target getvariable [QGVAR(openWounds), []]; { _amountOf = _x select 3; if (_amountOf > 0 && {(_selectionN == (_x select 2))}) exitwith { - _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; + _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; }; -}foreach _openWounds; +} foreach _openWounds; diff --git a/addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf b/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf similarity index 64% rename from addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf rename to addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf index 5d88fa0f0a..cf884e0ab0 100644 --- a/addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf +++ b/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf @@ -22,12 +22,11 @@ _activated = _this select 2; if !(_activated) exitWith {}; -[_logic, QGVAR(medicSetting), "medicSetting"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(maxReviveTime), "maxReviveTime"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(amountOfReviveLives), "amountOfReviveLives"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(enableOverdosing), "enableOverdosing"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(allowLitterCreation), "allowLitterCreation"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(litterCleanUpDelay), "litterCleanUpDelay"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableFor), "enableFor"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableAdvancedWounds), "enableAdvancedWounds"] call EFUNC(common,readSettingFromModule); +// TODO disabled until implemented +// [_logic, QGVAR(enableAirway), "enableAirway"] call EFUNC(common,readSettingFromModule); +// [_logic, QGVAR(enableFractures), "enableFractures"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(medicSetting_PAK), "medicSetting_PAK"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(medicSetting_SurgicalKit), "medicSetting_SurgicalKit"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(consumeItem_PAK), "consumeItem_PAK"] call EFUNC(common,readSettingFromModule); diff --git a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf index 539d428da0..af6de73ce1 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf @@ -37,7 +37,7 @@ if (!isNull _logic) then { _list = "[" + _nilCheckPassedList + "]"; _parsedList = [] call compile _list; - _setting = _logic getvariable ["enabled", false]; + _setting = _logic getvariable ["enabled", 0]; _objects = synchronizedObjects _logic; if (!(_objects isEqualTo []) && _parsedList isEqualTo []) then { { diff --git a/addons/medical/functions/fnc_moduleMedicalSettings.sqf b/addons/medical/functions/fnc_moduleMedicalSettings.sqf index 34dd063a4d..296b4f1d56 100644 --- a/addons/medical/functions/fnc_moduleMedicalSettings.sqf +++ b/addons/medical/functions/fnc_moduleMedicalSettings.sqf @@ -23,15 +23,14 @@ _activated = _this select 2; if !(_activated) exitWith {}; [_logic, QGVAR(level), "level"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(enableFor), "enableFor"] call EFUNC(common,readSettingFromModule); -// TODO disabled until implemented -// [_logic, QGVAR(enableAirway), "enableAirway"] call EFUNC(common,readSettingFromModule); -// [_logic, QGVAR(enableFractures), "enableFractures"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(enableAdvancedWounds), "enableAdvancedWounds"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(medicSetting), "medicSetting"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(allowLitterCreation), "allowLitterCreation"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(litterCleanUpDelay), "litterCleanUpDelay"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(enableScreams), "enableScreams"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(playerDamageThreshold), "playerDamageThreshold"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(AIDamageThreshold), "AIDamageThreshold"] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(enableUnsconsiousnessAI), "enableUnsconsiousnessAI"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableUnconsciousnessAI), "enableUnconsciousnessAI"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(preventInstaDeath), "preventInstaDeath"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(bleedingCoefficient), "bleedingCoefficient"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(painCoefficient), "painCoefficient"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(keepLocalSettingsSynced), "keepLocalSettingsSynced"] call EFUNC(common,readSettingFromModule); diff --git a/addons/medical/functions/fnc_moduleReviveSettings.sqf b/addons/medical/functions/fnc_moduleReviveSettings.sqf new file mode 100644 index 0000000000..c96b1eb67c --- /dev/null +++ b/addons/medical/functions/fnc_moduleReviveSettings.sqf @@ -0,0 +1,27 @@ +/* + * Author: Glowbal + * Module for adjusting the medical revive settings + * + * Arguments: + * 0: The module logic + * 1: units + * 2: activated + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_logic", "_units", "_activated"]; +_logic = _this select 0; +_units = _this select 1; +_activated = _this select 2; + +if !(_activated) exitWith {}; + +[_logic, QGVAR(maxReviveTime), "maxReviveTime"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(amountOfReviveLives), "amountOfReviveLives"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableRevive), "enableRevive"] call EFUNC(common,readSettingFromModule); diff --git a/addons/medical/functions/fnc_onWoundUpdateRequest.sqf b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf index ccbb373648..3c99496d7b 100644 --- a/addons/medical/functions/fnc_onWoundUpdateRequest.sqf +++ b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf @@ -13,7 +13,7 @@ */ #include "script_component.hpp" -private ["_unit", "_openWounds"]; +private ["_unit", "_openWounds", "_originOfrequest"]; _unit = _this select 0; _originOfrequest = _this select 1; diff --git a/addons/medical/functions/fnc_parseConfigForInjuries.sqf b/addons/medical/functions/fnc_parseConfigForInjuries.sqf index c624b1af1b..503ff9833e 100644 --- a/addons/medical/functions/fnc_parseConfigForInjuries.sqf +++ b/addons/medical/functions/fnc_parseConfigForInjuries.sqf @@ -12,7 +12,7 @@ #include "script_component.hpp" -private ["_injuriesRootConfig", "_woundsConfig", "_allWoundClasses", "_amountOf", "_entry","_classType", "_selections", "_bloodLoss", "_pain","_minDamage","_causes", "_damageTypesConfig", "_thresholds", "_typeThresholds", "_selectionSpecific", "_selectionSpecificType", "_classDisplayName", "_subClassDisplayName", "_maxDamage", "_subClassmaxDamage", "_defaultMinLethalDamage", "_minLethalDamage"]; +private ["_injuriesRootConfig", "_woundsConfig", "_allWoundClasses", "_amountOf", "_entry","_classType", "_selections", "_bloodLoss", "_pain","_minDamage","_causes", "_damageTypesConfig", "_thresholds", "_typeThresholds", "_selectionSpecific", "_selectionSpecificType", "_classDisplayName", "_subClassDisplayName", "_maxDamage", "_subClassmaxDamage", "_defaultMinLethalDamage", "_minLethalDamage", "_allFoundDamageTypes", "_classID", "_configDamageTypes", "_i", "_parseForSubClassWounds", "_subClass", "_subClassConfig", "_subClassbloodLoss", "_subClasscauses", "_subClassminDamage", "_subClasspain", "_subClassselections", "_subClasstype", "_type", "_varName", "_woundTypes"]; _injuriesRootConfig = (configFile >> "ACE_Medical_Advanced" >> "Injuries"); _allFoundDamageTypes = []; diff --git a/addons/medical/functions/fnc_playInjuredSound.sqf b/addons/medical/functions/fnc_playInjuredSound.sqf index 16a7d69116..c48e3d0a4c 100644 --- a/addons/medical/functions/fnc_playInjuredSound.sqf +++ b/addons/medical/functions/fnc_playInjuredSound.sqf @@ -15,7 +15,7 @@ #include "script_component.hpp" -private ["_unit","_amountOfDamage","_bodyPartStatus","_availableSounds_A","_availableSounds_B","_availableSounds_C","_sound"]; +private ["_unit","_availableSounds_A","_availableSounds_B","_availableSounds_C","_sound", "_pain"]; _unit = _this select 0; _pain = _this select 1; if (!local _unit || !GVAR(enableScreams)) exitwith{}; diff --git a/addons/medical/functions/fnc_requestWoundSync.sqf b/addons/medical/functions/fnc_requestWoundSync.sqf index 7144c49684..74fd3e230d 100644 --- a/addons/medical/functions/fnc_requestWoundSync.sqf +++ b/addons/medical/functions/fnc_requestWoundSync.sqf @@ -14,7 +14,7 @@ #include "script_component.hpp" -private [ "_target", "_caller", "_openWounds"]; +private [ "_target", "_caller"]; _target = _this select 0; _caller = _this select 1; diff --git a/addons/medical/functions/fnc_setDead.sqf b/addons/medical/functions/fnc_setDead.sqf index 334a2d8b97..411fd6dc06 100644 --- a/addons/medical/functions/fnc_setDead.sqf +++ b/addons/medical/functions/fnc_setDead.sqf @@ -13,7 +13,7 @@ #include "script_component.hpp" -private ["_unit", "_force"]; +private ["_unit", "_force", "_reviveVal", "_lifesLeft"]; _unit = _this select 0; _force = false; if (count _this >= 2) then { @@ -26,7 +26,8 @@ if (!local _unit) exitwith { false; }; -if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) && !_force) exitwith { +_reviveVal = _unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]; +if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal == 2)) && !_force) exitwith { if (_unit getvariable [QGVAR(inReviveState), false]) exitwith { if (GVAR(amountOfReviveLives) > 0) then { _lifesLeft = _unit getvariable[QGVAR(amountOfReviveLives), GVAR(amountOfReviveLives)]; diff --git a/addons/medical/functions/fnc_setHitPointDamage.sqf b/addons/medical/functions/fnc_setHitPointDamage.sqf index d71edc94df..18d4fc616e 100644 --- a/addons/medical/functions/fnc_setHitPointDamage.sqf +++ b/addons/medical/functions/fnc_setHitPointDamage.sqf @@ -21,7 +21,7 @@ #define ARMDAMAGETRESHOLD1 1 #define ARMDAMAGETRESHOLD2 1.7 -private ["_unit", "_selection", "_damage", "_selections", "_damages", "_damageOld", "_damageSumOld", "_damageNew", "_damageSumNew", "_damageFinal"]; +private ["_unit", "_selection", "_damage", "_selections", "_damages", "_damageOld", "_damageSumOld", "_damageNew", "_damageSumNew", "_damageFinal", "_armdamage", "_legdamage"]; _unit = _this select 0; _selection = _this select 1; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 86f9425d23..72d297b2c8 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -17,11 +17,14 @@ #define DEFAULT_DELAY (round(random(10)+5)) -private ["_unit", "_set", "_animState", "_originalPos", "_captiveSwitch", "_startingTime","_minWaitingTime"]; +private ["_unit", "_set", "_animState", "_originalPos", "_startingTime","_minWaitingTime"]; _unit = _this select 0; _set = if (count _this > 1) then {_this select 1} else {true}; _minWaitingTime = if (count _this > 2) then {_this select 2} else {DEFAULT_DELAY}; +// No change, fuck off. (why is there no xor?) +if (_set isEqualTo (_unit getVariable ["ACE_isUnconscious", false])) exitWith {}; + if !(_set) exitwith { _unit setvariable ["ACE_isUnconscious", false, true]; }; @@ -43,16 +46,17 @@ if (_unit == ACE_player) then { }; // if we have unconsciousness for AI disabled, we will kill the unit instead -if (!([_unit] call EFUNC(common,IsPlayer)) && (GVAR(enableUnsconsiousnessAI) == 0 || (GVAR(enableUnsconsiousnessAI) == 2 && random(1) <= 0.5))) exitwith { - [_unit, true] call FUNC(setDead); // force, to avoid getting into a loop in case revive is enabled. +if !([_unit] call EFUNC(common,isPlayer)) then { + _enableUncon = _unit getVariable [QGVAR(enableUnconsciousnessAI), GVAR(enableUnconsciousnessAI)]; + if (_enableUncon == 0 or {_enableUncon == 1 and (random 1) < 0.5}) exitWith { + [_unit, true] call FUNC(setDead); + }; }; // If a unit has the launcher out, it will sometimes start selecting the primairy weapon while unconscious, // therefor we force it to select the primairy weapon before going unconscious if ((vehicle _unit) isKindOf "StaticWeapon") then { - moveOut _unit; - unassignVehicle _unit; - //_unit action ["eject", vehicle _unit]; + [_unit] call EFUNC(common,unloadPerson); }; if (animationState _unit in ["ladderriflestatic","laddercivilstatic"]) then { _unit action ["ladderOff", (nearestBuilding _unit)]; @@ -62,12 +66,14 @@ if (vehicle _unit == _unit) then { _unit addWeapon "ACE_FakePrimaryWeapon"; }; _unit selectWeapon (primaryWeapon _unit); - _unit switchMove ""; - _unit playmoveNow ""; }; // We are storing the current animation, so we can use it later on when waking the unit up inside a vehicle -_animState = animationState _unit; +if (vehicle _unit != _unit) then { + _unit setVariable [QGVAR(vehicleAwakeAnim), [(vehicle _unit), (animationState _unit)]]; +}; + +//Save current stance: _originalPos = unitPos _unit; _unit setUnitPos "DOWN"; @@ -80,11 +86,19 @@ if (GVAR(moveUnitsFromGroupOnUnconscious)) then { }; [_unit, QGVAR(unconscious), true] call EFUNC(common,setCaptivityStatus); -[_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); +_anim = [_unit] call EFUNC(common,getDeathAnim); +[_unit, _anim, 1, true] call EFUNC(common,doAnimation); +[{ + _unit = _this select 0; + _anim = _this select 1; + if ((_unit getVariable "ACE_isUnconscious") and (animationState _unit != _anim)) then { + [_unit, _anim, 2, true] call EFUNC(common,doAnimation); + }; +}, [_unit, _anim], 0.5, 0] call EFUNC(common,waitAndExecute); _startingTime = time; -[DFUNC(unconsciousPFH), 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler; +[DFUNC(unconsciousPFH), 0.1, [_unit, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler; // unconscious can't talk [_unit, "isUnconscious"] call EFUNC(common,muteUnit); diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf index df6cc173d0..f50ff505e0 100644 --- a/addons/medical/functions/fnc_treatment.sqf +++ b/addons/medical/functions/fnc_treatment.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_config", "_availableLevels", "_medicRequired", "_items", "_locations", "_return", "_callbackSuccess", "_callbackFailure", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems"]; +private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf b/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf index ee3f51f549..0a49420783 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf @@ -16,7 +16,7 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem"]; +private ["_caller", "_target", "_selectionName", "_className", "_items"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf index 146e996d25..394595ade3 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem"]; +private ["_caller", "_target", "_selectionName", "_className", "_items", "_specificSpot"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; @@ -37,6 +37,6 @@ if !([_target] call FUNC(hasMedicalEnabled)) exitwith { }; }foreach _items;*/ -[_target, "activity", "STR_ACE_MEDICAL_ACTIVITY_bandagedPatient", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); +[_target, "activity", "STR_ACE_Medical_Activity_bandagedPatient", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf index 2884503599..d6c490d3c6 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf @@ -15,7 +15,7 @@ #include "script_component.hpp" -private ["_target", "_bandage", "_part", "_selectionName", "_openWounds", "_config", "_effectiveness","_mostEffectiveInjury", "_mostEffectiveSpot", "_woundEffectivenss", "_mostEffectiveInjury", "_impact", "_exit", "_specificClass", "_classID", "_effectivenessFound"]; +private ["_target", "_bandage", "_part", "_selectionName", "_openWounds", "_config", "_effectiveness","_mostEffectiveInjury", "_mostEffectiveSpot", "_woundEffectivenss", "_mostEffectiveInjury", "_impact", "_exit", "_specificClass", "_classID", "_effectivenessFound", "_className", "_hitPoints", "_hitSelections", "_point", "_woundTreatmentConfig"]; _target = _this select 0; _bandage = _this select 1; _selectionName = _this select 2; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf index 807be828e8..37627a8c5d 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf @@ -10,7 +10,7 @@ #include "script_component.hpp" -private ["_unit", "_caller", "_selectionName", "_className", "_items"]; +private ["_target", "_caller", "_selectionName", "_className", "_items"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf index 77f6d7f44c..e385c5f7c0 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf @@ -55,7 +55,7 @@ if (alive _target) exitwith { _target setvariable [QGVAR(inCardiacArrest), false, true]; _target setvariable [QGVAR(inReviveState), false, true]; _target setVariable ["ACE_isUnconscious", false, true]; - _target setvariable [QGVAR(hasLostBlood), false, true]; + _target setvariable [QGVAR(hasLostBlood), 0, true]; _target setvariable [QGVAR(isBleeding), false, true]; _target setvariable [QGVAR(hasPain), false, true]; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf index 508040b8af..c6ac2dc8e5 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem"]; +private ["_caller", "_target", "_selectionName", "_className", "_items"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; @@ -32,6 +32,6 @@ _items = _this select 4; }; }foreach _items; -[_target, "activity", "STR_ACE_MEDICAL_ACTIVITY_usedItem", [[_caller] call EFUNC(common,getName), _className]] call FUNC(addToLog); +[_target, "activity", "STR_ACE_Medical_Activity_usedItem", [[_caller] call EFUNC(common,getName), _className]] call FUNC(addToLog); true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf index bbf5aea6c0..934bc9239a 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf @@ -15,7 +15,7 @@ #include "script_component.hpp" -private ["_target", "_className", "_currentInSystem", "_medicationConfig", "_painReduce", "_hrIncreaseLow", "_hrIncreaseNorm", "_hrIncreaseHigh", "_maxDose", "_inCompatableMedication", "_timeInSystem", "_heartRate", "_pain", "_resistance", "_hrCallback"]; +private ["_target", "_className", "_currentInSystem", "_medicationConfig", "_painReduce", "_hrIncreaseLow", "_hrIncreaseNorm", "_hrIncreaseHigh", "_maxDose", "_inCompatableMedication", "_timeInSystem", "_heartRate", "_pain", "_resistance", "_hrCallback", "_varName", "_viscosityChange"]; _target = _this select 0; _className = _this select 1; @@ -77,9 +77,9 @@ if (_painReduce > 0) then { _target setvariable [QGVAR(pain), (_pain - (_pain * _painReduce)) max 0]; }; -_resistance = _unit getvariable [QGVAR(peripheralResistance), 100]; +_resistance = _target getvariable [QGVAR(peripheralResistance), 100]; _resistance = _resistance + _viscosityChange; -_unit setvariable [QGVAR(peripheralResistance), _resistance max 0]; +_target setvariable [QGVAR(peripheralResistance), _resistance max 0]; // Call back to ensure that the medication is decreased over time [_target, _classname, _varName, _maxDose, _timeInSystem, _inCompatableMedication, _viscosityChange] call FUNC(onMedicationUsage); diff --git a/addons/medical/functions/fnc_treatmentBasic_bandage.sqf b/addons/medical/functions/fnc_treatmentBasic_bandage.sqf index 4b07e989aa..75b0b6bfdd 100644 --- a/addons/medical/functions/fnc_treatmentBasic_bandage.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_bandage.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" #define BANDAGEHEAL 0.8 -private ["_caller", "_target","_selection","_className","_target","_hitSelections","_hitPoints","_point"]; +private ["_caller", "_target","_selection","_className","_target","_hitSelections","_hitPoints","_point", "_damage"]; _caller = _this select 0; _target = _this select 1; _selection = _this select 2; diff --git a/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf index 57563ad8fc..9d2c12280d 100644 --- a/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf @@ -15,12 +15,9 @@ */ #include "script_component.hpp" -#define BLOODBAGHEAL 70 -private ["_caller", "_target","_className","_blood"]; +private ["_caller", "_target"]; _caller = _this select 0; _target = _this select 1; -_className = _this select 3; -_blood = ((_target getVariable [QGVAR(bloodVolume), 100]) + BLOODBAGHEAL) min 100; -_target setVariable [QGVAR(bloodVolume), _blood, true]; +[[_target], QUOTE(DFUNC(treatmentBasic_bloodbagLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf b/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf new file mode 100644 index 0000000000..9bbe04b35f --- /dev/null +++ b/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf @@ -0,0 +1,21 @@ +/* + * Author: KoffeinFlummi + * Local callback when the bloodbag treatment is complete + * + * Arguments: + * 0: The patient + * + * Return Value: + * nil + * + * Public: No + */ + +#include "script_component.hpp" +#define BLOODBAGHEAL 70 + +private ["_target","_blood"]; +_target = _this select 0; + +_blood = ((_target getVariable [QGVAR(bloodVolume), 100]) + BLOODBAGHEAL) min 100; +_target setVariable [QGVAR(bloodVolume), _blood, true]; diff --git a/addons/medical/functions/fnc_treatmentBasic_morphine.sqf b/addons/medical/functions/fnc_treatmentBasic_morphine.sqf index d8d793d0bc..048b314781 100644 --- a/addons/medical/functions/fnc_treatmentBasic_morphine.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_morphine.sqf @@ -17,15 +17,8 @@ #include "script_component.hpp" #define MORPHINEHEAL 0.4 -private ["_caller", "_target","_className","_blood","_morphine","_pain"]; +private ["_caller", "_target"]; _caller = _this select 0; _target = _this select 1; -_className = _this select 3; -// reduce pain, pain sensitivity -_morphine = ((_target getVariable [QGVAR(morphine), 0]) + MORPHINEHEAL) min 1; -_target setVariable [QGVAR(morphine), _morphine, true]; -_pain = ((_target getVariable [QGVAR(pain), 0]) - MORPHINEHEAL) max 0; -_target setVariable [QGVAR(pain), _pain, true]; - -// @todo overdose +[[_target], QUOTE(DFUNC(treatmentBasic_morphineLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf b/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf new file mode 100644 index 0000000000..9dddf743e2 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf @@ -0,0 +1,27 @@ +/* + * Author: KoffeinFlummi + * Local callback when the morphine treatment is complete + * + * Arguments: + * 0: The medic + * 1: The patient + * + * Return Value: + * nil + * + * Public: No + */ + +#include "script_component.hpp" +#define MORPHINEHEAL 0.4 + +private ["_target", "_morphine", "_pain"]; +_target = _this select 0; + +// reduce pain, pain sensitivity +_morphine = ((_target getVariable [QGVAR(morphine), 0]) + MORPHINEHEAL) min 1; +_target setVariable [QGVAR(morphine), _morphine, true]; +_pain = ((_target getVariable [QGVAR(pain), 0]) - MORPHINEHEAL) max 0; +_target setVariable [QGVAR(pain), _pain, true]; + +// @todo overdose diff --git a/addons/medical/functions/fnc_treatmentIV.sqf b/addons/medical/functions/fnc_treatmentIV.sqf index c171d7364f..c0f4e4681f 100644 --- a/addons/medical/functions/fnc_treatmentIV.sqf +++ b/addons/medical/functions/fnc_treatmentIV.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem", "_attributes"]; +private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; @@ -29,4 +29,4 @@ if (count _items == 0) exitwith {}; _removeItem = _items select 0; [[_target, _removeItem], QUOTE(DFUNC(treatmentIVLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ [_target, _removeItem] call FUNC(addToTriageCard); -[_target, "activity", "STR_ACE_MEDICAL_ACTIVITY_gaveIV", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); +[_target, "activity", "STR_ACE_Medical_Activity_gaveIV", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); diff --git a/addons/medical/functions/fnc_treatmentIVLocal.sqf b/addons/medical/functions/fnc_treatmentIVLocal.sqf index 66ecdf9d90..04708b965f 100644 --- a/addons/medical/functions/fnc_treatmentIVLocal.sqf +++ b/addons/medical/functions/fnc_treatmentIVLocal.sqf @@ -15,7 +15,7 @@ #include "script_component.hpp" -private ["_target", "_ivItem", "_config", "_volumeAdded", "_typeOf", "_varName"]; +private ["_target", "_ivItem", "_config", "_volumeAdded", "_typeOf", "_varName", "_bloodVolume"]; _target = _this select 0; _ivItem = _this select 1; @@ -27,8 +27,8 @@ _config = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "IV"); _volumeAdded = getNumber (_config >> "volume"); _typeOf = getText (_config >> "type"); -if (isClass (_config >> _className)) then { - _config = (_config >> _className); +if (isClass (_config >> _ivItem)) then { + _config = (_config >> _ivItem); if (isNumber (_config >> "volume")) then { _volumeAdded = getNumber (_config >> "volume");}; if (isText (_config >> "type")) then { _typeOf = getText (_config >> "type"); }; }; diff --git a/addons/medical/functions/fnc_treatmentTourniquet.sqf b/addons/medical/functions/fnc_treatmentTourniquet.sqf index da50c5c1bf..c4ee10011e 100644 --- a/addons/medical/functions/fnc_treatmentTourniquet.sqf +++ b/addons/medical/functions/fnc_treatmentTourniquet.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_caller","_target","_part","_selectionName","_removeItem", "_tourniquets", "_items", "_output"]; +private ["_caller","_target","_part","_selectionName","_removeItem", "_tourniquets", "_items", "_output", "_className"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; @@ -43,7 +43,7 @@ _removeItem = _items select 0; [[_target, _removeItem, _selectionName], QUOTE(DFUNC(treatmentTourniquetLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ [_target, _removeItem] call FUNC(addToTriageCard); -[_target, "activity", "STR_ACE_MEDICAL_ACTIVITY_appliedTourniquet", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); +[_target, "activity", "STR_ACE_Medical_Activity_appliedTourniquet", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); true; diff --git a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf index 289f852a06..02484bbca6 100644 --- a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf +++ b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf @@ -29,7 +29,7 @@ _tourniquets set[_part, _applyingTo]; _target setvariable [QGVAR(tourniquets), _tourniquets, true]; [{ - private ["_args","_target","_applyingTo","_part", "_tourniquets"]; + private ["_args","_target","_applyingTo","_part", "_tourniquets", "_time"]; _args = _this select 0; _target = _args select 0; _applyingTo = _args select 1; diff --git a/addons/medical/functions/fnc_treatment_failure.sqf b/addons/medical/functions/fnc_treatment_failure.sqf index 33712956a0..19352e5441 100644 --- a/addons/medical/functions/fnc_treatment_failure.sqf +++ b/addons/medical/functions/fnc_treatment_failure.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_caller", "_target","_selectionName","_className","_config","_callback", "_usersOfItems", "_weaponSelect"]; +private ["_args", "_caller", "_target","_selectionName","_className","_config","_callback", "_usersOfItems", "_weaponSelect"]; _args = _this select 0; _caller = _args select 0; @@ -58,6 +58,6 @@ if (isNil _callback) then { _callback = missionNamespace getvariable _callback; }; -_args call FUNC(createLitter); - _args call _callback; + +_args call FUNC(createLitter); diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index 66406a180a..ffe67d21bc 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_caller", "_target","_selectionName","_className","_config","_callback", "_weaponSelect"]; +private ["_args", "_caller", "_target","_selectionName","_className","_config","_callback", "_weaponSelect"]; _args = _this select 0; _caller = _args select 0; _target = _args select 1; @@ -52,6 +52,6 @@ if (isNil _callback) then { _callback = missionNamespace getvariable _callback; }; -_args call FUNC(createLitter); - _args call _callback; + +_args call FUNC(createLitter); diff --git a/addons/medical/functions/fnc_unconsciousPFH.sqf b/addons/medical/functions/fnc_unconsciousPFH.sqf index fc60c2bb02..f0759a66ba 100644 --- a/addons/medical/functions/fnc_unconsciousPFH.sqf +++ b/addons/medical/functions/fnc_unconsciousPFH.sqf @@ -3,7 +3,14 @@ * PFH logic for unconscious state * * Arguments: - * 0: The unit that will be put in an unconscious state + * 0: PFEH - Args + * 0: The unit that will be put in an unconscious state + * 1: unitPos (stance) + * 2: Starting Time + * 3: Minimum Waiting Time + * 4: Has Moved Out + * 5: Parachute Check + * 1: PFEH ID * * ReturnValue: * nil @@ -13,15 +20,14 @@ #include "script_component.hpp" -private ["_unit", "_vehicleOfUnit","_minWaitingTime", "_oldAnimation", "_captiveSwitch", "_hasMovedOut", "_parachuteCheck"]; +private ["_unit", "_minWaitingTime", "_slotInfo", "_hasMovedOut", "_parachuteCheck", "_args", "_originalPos", "_startingTime", "_awakeInVehicleAnimation", "_oldVehicleAnimation", "_vehicle"]; _args = _this select 0; _unit = _args select 0; -_oldAnimation = _args select 1; -_originalPos = _args select 2; -_startingTime = _args select 3; -_minWaitingTime = _args select 4; -_hasMovedOut = _args select 5; -_parachuteCheck = _args select 6; +_originalPos = _args select 1; +_startingTime = _args select 2; +_minWaitingTime = _args select 3; +_hasMovedOut = _args select 4; +_parachuteCheck = _args select 5; if (!alive _unit) exitwith { if (GVAR(moveUnitsFromGroupOnUnconscious)) then { @@ -51,10 +57,37 @@ if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { [_unit,"amovppnemstpsnonwnondnon", 2] call EFUNC(common,doAnimation); }; } else { - // Switch to the units original animation, assuming - // TODO: what if the unit switched vehicle? - [_unit, _oldAnimation, 2] call EFUNC(common,doAnimation); + _vehicle = vehicle _unit; + _oldVehicleAnimation = _unit getVariable [QGVAR(vehicleAwakeAnim), []]; + _awakeInVehicleAnimation = ""; + if (((count _oldVehicleAnimation) > 0) && {(_oldVehicleAnimation select 0) == _vehicle}) then { + _awakeInVehicleAnimation = _oldVehicleAnimation select 1; + }; + //Make sure we have a valid, non-terminal animation: + if ((_awakeInVehicleAnimation != "") && {(getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> _awakeInVehicleAnimation >> "terminal")) == 0}) then { + [_unit, _awakeInVehicleAnimation, 2] call EFUNC(common,doAnimation); + } else { + //Don't have a valid animation saved, reset the unit animation with a moveInXXX + TRACE_1("No Valid Animation, doing seat reset", _awakeInVehicleAnimation); + _slotInfo = []; + {if ((_x select 0) == _unit) exitWith {_slotInfo = _x;};} forEach (fullCrew _vehicle); + if (_slotInfo isEqualTo []) exitWith {ERROR("No _slotInfo?");}; + //Move the unit out: + _unit setPosASL ((getPosASL _unit) vectorAdd [0,0,100]); + //Move the unit back into old seat: + if ((_slotInfo select 1) == "driver") then { + _unit moveInDriver _vehicle; + } else { + if ((_slotInfo select 1) == "cargo") then { + _unit moveInCargo [_vehicle, (_slotInfo select 2)]; + } else { + _unit moveInTurret [_vehicle, (_slotInfo select 3)]; + }; + }; + }; }; + _unit setVariable [QGVAR(vehicleAwakeAnim), nil]; + ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); // EXIT PFH [(_this select 1)] call cba_fnc_removePerFrameHandler; @@ -76,19 +109,19 @@ if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { [_unit, "isUnconscious"] call EFUNC(common,unmuteUnit); // ensure this statement runs only once - _args set [5, true]; + _args set [4, true]; }; }; if (_parachuteCheck) then { if !(vehicle _unit isKindOf "ParachuteBase") then { [_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); - _args set [6, false]; + _args set [5, false]; }; }; if (!local _unit) exitwith { - _args set [ 4, _minWaitingTime - (time - _startingTime)]; + _args set [3, _minWaitingTime - (time - _startingTime)]; _unit setvariable [QGVAR(unconsciousArguments), _args, true]; [(_this select 1)] call cba_fnc_removePerFrameHandler; }; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 99adc0cb3a..215d9ae766 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -4,26 +4,50 @@ INJURIES VERLETZUNGEN + LESIONI ТРАВМЫ + BLESSURES + OBRAŻENIA HERIDAS + SÉRÜLÉSEK + ZRANĚNÍ + FERIMENTOS No injuries on this bodypart ... Körperteil nicht verletzt ... + Non ci sono lesioni in questa parte del corpo ... Данная часть тела не повреждена ... + Aucune blessures sur cette partie du corps ... + Brak obrażeń na tej części ciała ... Sin heridas en esta parte del cuerpo ... + Ezen a testrészen nincs sérülés ... + Žádné zranění na této části těla ... + Nenhum ferimento nesta parte do corpo... Litter Simulation Detail Detale zużytych medykamentów Detalle de simulación de basura Количество мусора от медицины + Dettagli Simulazione Rifiuti + Niveau de simulation des détritus + Abfall-Detaillevel + Hulladékszimuláció részletessége + Detalhe da simulação de sujeira + Počet zobrazených předmětů po použití zdravotnického materiálu 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. Устанавливает количество мусора, который появляется после использования мед. препаратов. Большое количество мусора может уменьшить производительность, поэтому данная настройка локальна для клиента. + Il livello di dettagli della simulazione dei rifiuti indica il numero di rifiuti che verranno creati localmente nel client. La creazione di troppi rifiuti in aree locali potrebbe causare lag e calo di FPS. Questo è un settaggio client. + Le niveau de simulation des détritus règle la quantité de déchets qui vont être créés localement chez le client. Des quantitées excessive chez certains clients peuvent causer des chutes de FPS, c'est donc une option client uniquement. + Die Einstellung für das Abfall-Detaillevel stellt die Menge der lokal erzeugten medizinischen Abfälle ein. Zuviel erzeugte Abfälle können FPS-Lags erzeugen, deswegen ist diese Einstellung nur clientseitig. + A hulladékszimuláció részletessége megszabja a kliens által megjelenített hulladékobjektumok mennyiségét. Súlyos mennyiségek izolált területeken alacsony FPS-t okozhatnak, így ez egy kliensoldali beállítás. + O nível de detalhe de sujeira determina o número de itens que irão aparecer no cliente. Quantidades excessivas em áreas locais podem aumentar o lag do FPS, então esta é uma opção somente para o cliente. + Počet zobrazených předmětů po použití zdravotnického materiálu ovlivňuje počet objektů, které budou zobrazeny klientovi v místě použití zdravotnického materiálu. Vyšší množství objektů může způsobovat poklesy FPS a proto je toto nastavení čistě na klientovi. Inject Atropine @@ -35,6 +59,7 @@ Ввести атропин Atropin beadása Inietta atropina + Injetar Atropina Inject Epinephrine @@ -55,10 +80,10 @@ Wstrzyknij morfinę Aplikovat morfin Ввести морфин - Morphine + Injecter de la morphine Morfium beadása Injetar Morfina - Inietta Morfina + Inietta morfina Transfuse Blood @@ -70,7 +95,7 @@ Transfusion Infúzió (vér) Transfundir Sangue - Effettua trasfusione di sangue + Trasfusione di sangue Transfuse Plasma @@ -81,7 +106,8 @@ Transfuser du Plasma Перелить плазму Infúzió (vérplazma) - Effettua trasfusione di plasma + Trasfusione di Plasma + Transfundir Plasma Transfuse Saline @@ -92,7 +118,8 @@ Transfuser de la solution saline Перелить физраствор Infúzió (sós víz) - Effettua trasfusione di soluzione salina + Trasfusione di soluzione salina + Transfundir Soro Apply Tourniquet @@ -103,6 +130,8 @@ Appliquer un garrot Наложить жгут Applica laccio emostatico + Aplicar Torniquete + Érszorító alkalmazása Bandage @@ -222,6 +251,7 @@ Введение атропина ... Atropin beadása ... Inietto l'atropina ... + Injetando Atropina Transfusing Blood ... @@ -244,7 +274,8 @@ Transfusion de saline ... Переливание физраствора ... Infúzió sós vizzel ... - Effettuo la rasfusione di salina + Effettuo la rasfusione di soluzione salina + Transfundindo Soro... Transfusing Plasma ... @@ -256,6 +287,7 @@ Переливание плазмы ... Infúzió vérplazmával ... Effettu la trasfusione di plasma ... + Transfundindo Plasma... Bandaging ... @@ -279,8 +311,9 @@ Наложение жгута ... Érszorító felhelyezése ... Sto applicando il laccio emostatico ... + Applicando Torniquete - + Medical Zdravotní Médical @@ -292,7 +325,7 @@ Médico Orvosi - + Field Dressing Verbandpäckchen Compresa de campaña @@ -302,8 +335,9 @@ Bandage rapide Zárókötszer Bendaggio rapido + Curativo de Campo - + Packing Bandage Mullbinde Vendaje compresivo @@ -312,8 +346,10 @@ Nyomókötszer Bendaggio compressivo Bandage gauze + Bandagem de Compressão + Tlakový obvaz - + Elastic Bandage Elastischer Verband Vendaje elástico @@ -323,30 +359,33 @@ Pansement élastique Rögzitő kötszer Bendaggio elastico + Bandagem Elástica - + QuikClot QuikClot QuikClot - QuickClot + QuikClot Opatrunek QuikClot QuikClot Hémostatique QuikClot - QuikClot(polvere emostatica) + QuikClot (polvere emostatica) + QuikClot - + Check Pulse Puls überprüfen Comprobar pulso Проверить пульс Zkontrolovat pulz Sprawdź tętno - Vérifier les pulsations + Vérifier le pouls Pulzus ellenőrzése Controlla il polso + Checar Pulso - + Check Blood Pressure Blutdruck überprüfen Comprobar presión arterial @@ -356,71 +395,105 @@ Vérification de la tension Vérnyomás megmérése Controlla pressionsa sanguigna + Chegar Pressão Sanguínea - + Triage Card Triagekarte Tarjeta de clasificación Медкарта Karta segregacyjna - Karta Triage + Štítek Carte de triage Orvosi lap Triage Card + Cartão de Triagem - + No entries on this triage card. Keine Einträge auf der Triagekarte + Nessuna voce sulla Triage Card Нет записей. + Aucune entrée sur cette carte de triage + Brak wpisów w tej karcie segregacyjnej. Sin entradas en esta tarjeta de clasificación. + Ez az orvosi lap nem tartalmaz bejegyzést. + Žádné záznamy na tomto štítku + Nenhuma entrada neste cartão de triagem - + Tourniquet Tourniquet Torniquete Жгут Škrtidlo Staza - Garrot + Tourniquet Érszorító Laccio emostatico + Torniquete - + Remove Tourniquet Tourniquet entfernen Quitar torniquete Снять жгут Sundat škrtidlo Zdejmij stazę - Enlever le garrot + Enlever le Tourniquet Érszorító leszedése Rimuovi laccio emostatico + Remover Torniquete - + Diagnose Diagnose + Diagnosi Диагностика + Diagnostiquer + Diagnoza Diagnosticar + Diagnosztizálás + Diagnóza + Diagnosticar - + Diagnosing ... Diagnostizieren ... + Diagnosi in corso... Диагностика ... + Diagnostic en cours + Diagnozowanie ... Diagnosticando ... + Diagnózis folyamatban... + Diagnostika ... + Diagnosticando... - + CPR HLW - Сердечно-легочная реанимация + RCP + Сердечно-лёгочная реанимация + RPC + RKO RCP + Újraélesztés + KPR + SBV - + Performing CPR ... HLW durchführen ... - Сердечно-легочная реанимация ... + Eseguendo RCP... + Сердечно-лёгочная реанимация ... + RPC en cours + Przeprowadzanie RKO ... Realizando RCP ... + Újraélesztés folyamatban... + Provádím KPR ... + Realizando o SBV... - + Give Blood IV (1000ml) Bluttransfusion IV (1000ml) Dar Sangre IV (1000ml) @@ -430,8 +503,9 @@ Podat krev. transfúzi (1000ml) Vér adása intravénásan (1000ml) Effettua trasfusione sangue IV (1000ml) + Administrar Sangue IV (1000ml) - + Give Blood IV (500ml) Bluttransfusion IV (500ml) Dar Sangre IV (500ml) @@ -441,8 +515,9 @@ Podat krev. transfúzi (500ml) Vér adása intravénásan (500ml) Effettua trasfusione sangue IV (500ml) + Administrar Sangue IV (500ml) - + Give Blood IV (250ml) Bluttransfusion IV (250ml) Dar Sangre IV (250ml) @@ -452,8 +527,9 @@ Podat krev. transfúzi (250ml) Vér adása intravénásan (250ml) Effettua trasfusione sangue IV (250ml) + Administrar Sangue IV (250ml) - + Give Plasma IV (1000ml) Plasmatransfusion IV (1000ml) Dar Plasma IV (1000ml) @@ -463,8 +539,9 @@ Podat plazmu (1000ml) Vérplazma adása intravénásan (1000ml) Effettua trasfusione plasma IV (1000ml) + Administrar Plasma IV (1000ml) - + Give Plasma IV (500ml) Plasmatransfusion IV (500ml) Dar Plasma IV (500ml) @@ -474,8 +551,9 @@ Podat plazmu (500ml) Vérplazma adása intravénásan (500ml) Effettua trasfusione plasma IV (500ml) + Administrar Plasma IV (500ml) - + Give Plasma IV (250ml) Plasmatransfusion IV (250ml) Dar Plasma IV (250ml) @@ -485,8 +563,9 @@ Podat plazmu (250ml) Vérplazma adása intravénásan (250ml) Effettua trasfusione plasma IV (250ml) + Administrar Plasma IV (250ml) - + Give Saline IV (1000ml) Kochsalzlösung IV (1000ml) Dar Salino IV (1000ml) @@ -496,8 +575,9 @@ Podaz fyz. roztok (1000ml) Sós víz adása intravénásan (1000ml) Effettua trasfusione salina IV (1000ml) + Administrar Soro IV (1000ml) - + Give Saline IV (500ml) Kochsalzlösung IV (500ml) Dar Salino IV (500ml) @@ -507,8 +587,9 @@ Podaz fyz. roztok (500ml) Sós víz adása intravénásan (500ml) Effettua trasfusione salina IV (500ml) + Administrar Soro IV (500ml) - + Give Saline IV (250ml) Kochsalzlösung IV (250ml) Dar Salino IV (250ml) @@ -518,19 +599,21 @@ Podaz fyz. roztok (250ml) Sós víz adása intravénásan (250ml) Effettua trasfusione salina IV (250ml) + Administrar Soro IV (250ml) - + Minor Gering Menor Несрочная помощь Normalny - Léger + Mineur Minimální Enyhe Minore + Leve - + Delayed Retrasado Срочная помощь @@ -540,19 +623,21 @@ Odložitelný Késleltetett Differito + Atrasado - + Immediate Inmediato Неотложная помощь Natychmiastowy Urgence Immédiate Sofort - Okamžiý + Okamžitý Azonnali Immediata + Imediato - + Deceased Fallecido Труп @@ -562,8 +647,9 @@ Mrtvý Elhalálozott Deceduto + Falecido - + None Ninguno Отсутствует @@ -573,8 +659,9 @@ Nic Semmi Nessuna + Nenhum - + Normal breathing Дыхание в норме Respiración normal @@ -584,8 +671,9 @@ Dýchá normálně Normális légzés Respiro normale + Respiração normal - + No breathing Keine Atmung Дыхание отсутствует @@ -595,8 +683,9 @@ Nedýchá Nincs légzés Mancanza di respiro + Não respira - + Difficult breathing Дыхание затруднено Dificultad para respirar @@ -606,8 +695,9 @@ Dýchá s obtížemi Nehéz légzés Difficoltà a respirare + Dificuldade para respirar - + Almost no breathing Fast keine Atmung Дыхание очень слабое @@ -617,8 +707,9 @@ Skoro nedýchá Alig van légzés Respira a fatica + Quase não respira - + Bleeding Blutet Кровотечение @@ -628,8 +719,9 @@ Krvácí Vérzik Sanguinando + Sangrando - + In Pain Hat Schmerzen Испытывает боль @@ -639,8 +731,9 @@ V bolestech Fájdalom alatt Con dolore + Com dor - + Lost a lot of Blood Hat eine große Menge Blut verloren Большая кровопотеря @@ -650,19 +743,21 @@ Ztratil hodně krve Sok vért vesztett Ha perso parecchio sangue + Perdeu muito sangue - + Tourniquet [CAT] Tourniquet [CAT] Жгут Torniquete [CAT] - Garrot [CAT] + Tourniquet [CAT] Staza [typ. CAT] Škrtidlo [CAT] Érszorító [CAT] Laccio emostatico [CAT] + Torniquete [CAT] - + Receiving IV [%1ml] Erhalte IV [%1ml] Reciviendo IV [%1ml] @@ -672,19 +767,21 @@ Přijímání transfúze [%1ml] Infúzióra kötve [%1ml] Ricevendo IV [%1ml] + Recebendo IV [%1ml] - + Bandage (Basic) Bandage (Standard) Повязка (обычная) Vendaje (Básico) Bandage (Standard) Bandaż (jałowy) - Bandáž (standartní) + Obvaz (standartní) Kötszer (Általános) Bendaggio (base) + Bandagem(Básico) - + Used to cover a wound Для перевязки ран Utilizado para cubrir una herida @@ -693,8 +790,10 @@ Verwendet, um Wunden abzudecken Sebesülések befedésére alkalmas Usato per coprire una ferita + Usado para cobrir um ferimento + Slouží k překrytí poranění - + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. Ein Verband, der aus einem besonderen Material besteht um die Wunde zu schützen, nachdem die Blutung gestoppt wurde. Повязка, накладываемая поверх раны после остановки кровотечения. @@ -702,9 +801,11 @@ Bandage fait d'un matériel spécial utilisé pour couvrir une blessure, qui peut etre appliqué dès que le saignement a été stoppé. Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. Egy különleges anyagú kötszer sebek betakarására, amelyet a vérzés elállítása után helyeznek fel. - Una benda apposta, utilizzata per coprire una ferita, la quale è applicato sopra di essa una volta fermata l'emorragia. + Una benda apposita, utilizzata per coprire una ferita, la quale viene applicata su di essa una volta fermata l'emorragia. + Uma curativo, material específico para cobrir um ferimento que é aplicado assim que o sangramento é estancando. + Obvaz je vhodným způsobem upravený sterilní materiál, určený k překrytí rány, případně k fixaci poranění. - + Packing Bandage Mullbinde Тампонирующая повязка @@ -713,8 +814,10 @@ Bandaż (uciskowy) Nyomókötszer Bendaggio compressivo + Bandagem de Compressão + Tlakový obvaz - + Used to pack medium to large wounds and stem the bleeding Wird verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen Для тампонирования ран среднего и большого размера и остановки кровотечения. @@ -722,30 +825,35 @@ Utilisé pour couvrir des blessures de taille moyenne à grande. Arrête l'hémorragies Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. Közepestől nagyig terjedő sebek betakarására és vérzés elállítására használt kötszer - Usato su medie o larghe ferite per fermare emorragie. + Usato su ferite medie o larghe per fermare emorragie. + Usado para o preenchimento de cavidades geradas por ferimentos médios e grandes e estancar o sangramento. + Používá se k zastavení středních až silnějších krvácení - + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. - Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. + Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжёлых сочетанных ранениях возможно тампонирование раны. Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. Bandage servant à recouvrir les blessures pour arrêter les hémmoragies et faciliter la guérisson. Recouvrir une blessure est optionnel dans le cas de blessures polytraumatiques Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. Egy kötszerfajta, melyet a sebek nyomására használnak a vérzés elállítása és sebgyógyulás érdekében. A nyomókötés egy lehetőség nagyobb polytraumatikus sérülések esetén. - Un bendaggio usato per bendare ferite con emorragie e facilitare la guarigione. Bendare una ferita è una opzione su ferite di vario tipo. + Un bendaggio usato per coprire la ferita, fermare il sanguinamento e facilitarne la guarigione. Questa tecnica è opzionale su ferite multiple. Ein Verband, um die Wunde abzudecken und die Wundheilung zu fördern. Wunden abdecken ist eine Option bei größeren Polytraumen + Uma bandagem usada para preencher o ferimento para estancar o sangramento e facilitar a cicatrização. Preenchimento de feridas é uma opção em ferimentos de politrauma grandes. + Tlakový obvaz se skládá se ze sterilní krycí vrstvy, na kterou je přiložena silná vrstva savého materiálu stlačující cévu v ráně a která je přitlačována k ráně a připevněna obinadlem. Slouží k zastavení silnějších krvácení. - + Bandage (Elastic) Bandage (Elastisch) Повязка (давящая) Vendaje (Elástico) Bandage (Élastique) Bandaż (elastyczny) - Bandáž (elastická) + Obvaz (elastický) Rögzító kötszer - Benda (Elastica) + Benda (elastica) + Bandagem (Elástica) - + Bandage kit, Elastic Elastische Binde (Kompressionsbinde) Давящая повязка @@ -753,30 +861,35 @@ Bandage compressif élastique Zestaw bandaży elastycznych. Rugalmas kötszercsomag, "rögzítő" - Kit bendaggio, elastico + Kit di bendaggio, elastico + Kit de Bandagem, Elástica + Sada obvazů, Elastická - + Allows an even compression and extra support to the injured area. Ermöglicht eine gleichmäßige Kompression und zusätzliche Unterstützung für den verletzten Bereich. - Давящая повязка обеспечивает равномерное сжатие и дополнительную поддержку поврежденной области + Давящая повязка обеспечивает равномерное сжатие и дополнительную поддержку повреждённой области Ce bandage peut être utilisé pour compresser la plaie afin de ralentir le saignement et assurer la tenue du bandage lors de mouvement. Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada Egyenletes nyomást és támogatást biztosít a sebesült felületnek. - Permette di comprimevere e aiutare la zone ferita. + Permette di comprimere e aiutare la zone ferita. + Esta bandagem pode ser utilizada para comprimir o ferimento e diminuir o sangramento e garantir que o ferimento não abra em movimento. + Hodí se k fixačním účelům a to i v oblastech kloubů. - + Tourniquet (CAT) Tourniquet [CAT] Жгут Torniquete (CAT) - Garrot (CAT) + Tourniquet (CAT) Staza (typ. CAT) Škrtidlo (CAT) Érszorító (CAT) Laccio emostatico (CAT) + Torniquete (CAT) - + Slows down blood loss when bleeding Замедляет кровопотерю при кровотечении Reduce la velocidad de pérdida de sangre @@ -785,8 +898,10 @@ Verringert den Blutverlust während einer Blutung Lelassítja a vérvesztést vérzés esetén Rallenta la perdita di sangue in caso di sanguinamento + Reduz a velocidade da perda de sangue + Zpomaluje ztráty krve při krvácení - + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. Жгут используется для прижатия сосудов к костным выступам, которое приводит к остановке или значительному уменьшению кровотечения Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre @@ -795,8 +910,10 @@ Ein Gerät, das Druck auf Venen und Arterien ausübt und so den Blutfluss verringert. Egy szűkítőeszköz, mely a vénás és artériás nyomás keringés helyi összenyomására szolgál, ezzel lelassítva vagy megállítva az adott területen a vérkeringést. Ez csökkenti a vérvesztés mértékét. Un laccio emostatico usato per comprimere le vene e arterie per bloccare o rallentare la circolazione del sangue e quindi rallentare dissanguamenti. + A aparelho que comprime as artérias e veias para diminuir a perda de sangue. + Zařízení používané ke stlačení venózního a arteriálního oběhu. V důsledku dochází ke zpomalení toku krve a tedy i snížení ztrát krve. - + Morphine autoinjector Morphium Autoinjektor Морфин в пневмошприце @@ -806,8 +923,9 @@ Autoinjektor morfin Morfium autoinjektor Autoiniettore di morfina + Auto-injetor de morfina - + Used to combat moderate to severe pain experiences Wird verwendet um moderate bis starke Schmärzen zu lindern. Для снятия средних и сильных болевых ощущений @@ -816,8 +934,10 @@ Morfina. Ma silne działanie przeciwbólowe. Mérsékelttől erős fájdalomig, ellene alkalmazandó termék Usato per combattere il dolore. + Usado para combater dores moderadas e severas + Slouží k tlumení středně těžkých a těžkých bolestí - + An analgesic used to combat moderate to severe pain experiences. Обезболивающее для снятия средних и сильных болевых ощущений. Analgésico usado para combatir los estados dolorosos de moderados a severos. @@ -826,8 +946,10 @@ Ein Schmerzmittel um mäßige bis starke Schmerzen zu behandeln Egy fájdalomcsillapító anyag, jellemzően mérsékelt vagy erős fájdalom esetén alkalmazandó. Un analgesico usato per combattere il dolore. + Um analgésico usado para combater dores moderadas e fortes. + Analgetikum slouží k tlumení středně těžkých a těžkých bolestí - + Atropin autoinjector Атропин в пневмошприце Atropina auto-inyectable @@ -836,9 +958,10 @@ Atropin Autoinjektor Autoinjektor atropin Atropin autoinjektor - Autoiniettore di Atropina + Autoiniettore di atropina + Auto-injetor de Atropina - + Used in NBC scenarios Применяется для защиты от ОМП Usado en escenarios NBQ @@ -847,8 +970,10 @@ Verwendet bei ABC Kontamination NBK helyzetek esetén használandó Usato in situazioni con gas nervino. + Usado em casos de ataque QBRN + Používá se v přítomnosti nervových plynů - + A drug used by the Military in NBC scenarios. Препарат, используемый в войсках для защиты от оружия массового поражения. Medicamento usado por militares en escenarios NBQ @@ -857,8 +982,10 @@ Ein Medikament, das vom Militär bei ABC Kontamination verwendet wird. Egy instabil alkaloid, NBK helyzetek esetén a katonai szervezetek veszik használatba. E' un farmaco usato in ambito militare in scenari con presenza di gas nervino. + Uma droga usada por militares em casos de ataque QBRN. + Atropin slouží jako protijed na otravu organofosfátovými insekticidy (diazinon) a nervovými plyny. - + Epinephrine autoinjector Адреналин в пневмошприце Epinefrina auto-inyectable @@ -867,9 +994,10 @@ Epiniphrin Autoinjektor Autoinjektor adrenalin Epinefrin autoinjektor - Autoiniettore di Epinefrina + Autoiniettore di epinefrina + Auto-injetor de epinefrina - + Increase heart rate and counter effects given by allergic reactions Стимулирует работу сердца и купирует аллергические реакции Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas @@ -878,8 +1006,10 @@ Steigert die Herzfrequenz und bekämpft Symptome von allergischen Reaktionen. Növeli a szívverést és ellenzi az allergiás reakciók hatásait Aumenta il battito cardiaco e combatte gli effetti di reazioni allergiche. + Aumenta a frequência cardíaca e combate efeitos causados por reações alérgicas + Zvyšuje srdeční frekvenci a chrání před alergickými reakcemi - + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшенной вероятностью благоприятного исхода. Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. @@ -887,8 +1017,11 @@ EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. Una sostanza che permette di dilatare i bronchi, aumentare il battito cardiaco e combattere effetti di reazioni allergiche. Usato anche in casi di arresto cardiaco. Ein Medikament, dass die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen(Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht. + Uma droga trabalha dilatando os bronquios, aumentando a frequência cardíaca e combate efeitos de reações alérgicas(anáfilaticas). Usado em casos de parada cardiaca com poucas changes de recuperação. + Egy hormon, mely a szimpatikus idegrendszer által kitágítja a hörgőket, valamint megnöveli a szívverést, ezzel ellensúlyozva ilyen jellegű allergiás reakciókat (anafilaxiás sokk). Hirtelen szívmegállás esetén is használt, idő alatt csökkenő hatásfokkal. + Zúžení periferních cév díky působení na alfa receptory a následné kontrakci hladkých svalů, tím dochází k tzv. centralizaci oběhu, krev se soustřeďuje v životně důležitých centrálních orgánech (srdce, mozek, plíce), působí také pozitivně na srdeční činnost a dochází ke zvýšení krevního tlaku a tepu. Dále se používá při náhlé srdeční zástavě. - + Plasma IV (1000ml) Плазма для в/в вливания (1000 мл) Plasma IV (1000ml) @@ -897,8 +1030,10 @@ Plasma IV (1000ml) Vérplazma-infúzió (1000ml) Plasma IV (1000ml) + Plasma IV (1000ml) + Krevní plazma (1000ml) - + A volume-expanding blood supplement. Дополнительный препарат, применяемый при возмещении объема крови. Suplemento para expandir el volumen sanguíneo. @@ -907,8 +1042,10 @@ Egy térfogatnövelő vérkiegészítmény. Aiuta ad aumentare il volume sanguigno. Volumenerweiterungsmittel (künstliches Blutvolumen) + Suplemento para expandir o volume sanguíneo. + Intravenózně podávaný doplněk k zvětšení objemu krve - + A volume-expanding blood supplement. Дополнительный препарат, применяемый при возмещении объема крови. Suplemento para expandir el volumen sanguíneo. @@ -917,8 +1054,10 @@ Egy térfogatnövelő vérkiegészítmény. Aiuta ad aumentare il volume sanguigno. Volumenerweiterungsmittel (künstliches Blutvolumen) + Suplemento para expandir o volume sanguíneo. + Intravenózně podávaný doplněk k zvětšení objemu krve - + Plasma IV (500ml) Плазма для в/в вливания (500 мл) Plasma IV (500ml) @@ -927,8 +1066,10 @@ Plasma IV (500ml) Vérplazma-infúzió (500ml) Plasma IV (500ml) + Plasma IV (500ml) + Krevní plazma (500ml) - + Plasma IV (250ml) Плазма для в/в вливания (250 мл) Plasma IV (250ml) @@ -937,8 +1078,10 @@ Plasma IV (250ml) Vérplazma-infúzió (250ml) Plasma IV (250ml) + Plasma IV (250ml) + Krevní plazma (250ml) - + Blood IV (1000ml) Кровь для переливания (1000 мл) Sangre IV (1000ml) @@ -947,18 +1090,22 @@ Blut IV (1000ml) Vér-infúzió (1000ml) Sangue IV (1000ml) + Sangue IV (1000ml) + Krevní transfúze (1000ml) - + Blood IV, for restoring a patients blood (keep cold) - Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) + Пакет крови для возмещения объёма потерянной крови (хранить в холодильнике) Sangre intravenosa, para restarurar el volumen sanguíneo (mantener frío) Cullot sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych Vér-infúzió, intravénás bejuttatásra egy páciensnek (hidegen tárolandó) Sangue usato per ripristinare pazienti in cui si è verificata una perdita di sangue (conservare al fresco) Blut IV, Bluthaushalt des Patienten wiederherstellen. (Kühl halten) + Sangue intravenoso, para restaurar o volume sanguinio do paciente.(Manter frio) + Krevní transfuze pro doplnění pacientovi krve (skladujte v chladu) - + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. @@ -966,8 +1113,11 @@ Sangue 0 negativo usato per ripristinare sangue in pazienti in cui si è verificata una perdita di sangue. Cullot sanguin O- utilisé dans de rares et stricts cas pour compléter une perte de sang importante. Administré normalement lors d'un MEDEVAC O Negative Blutinfusion wird nur in seltenen Fällen verwendet, um den Bluthaushalt des Patienten zu ergänzen. Wird in der Regel wärend der Transportphase durchgeführt. + Sangue O- , utilizado em casos raros para rapidamente repor o sangue. Uso habitual ocorre durante o transporte ou em estações de tratamento. + Nullás vércsoportú, Rh-negatív vér-infúzió, melyet kritikus és ritka helyzetekben vérutánpótlásra használnak, jellemzően az orvosi ellátás szállítási fázisa közben. + 0 Rh negativní krev se používá v vzácných případech k doplnění pacientovy hladiny krve, obvykle při převozu zraněné osoby do nemocnice. - + Blood IV (500ml) Кровь для переливания (500 мл) Sangre IV (500ml) @@ -976,8 +1126,10 @@ Blut IV (500ml) Vér-infúzió (500ml) Sangue IV (500ml) + Sangue IV (500ml) + Krevní transfúze (500ml) - + Blood IV (250ml) Кровь для переливания (250 мл) Sangre IV (250ml) @@ -986,8 +1138,10 @@ Blut IV (250ml) Vér-infúzió (250ml) Samgue IV (250ml) + Sangue IV (250ml) + Krevní transfúze (250ml) - + Saline IV (1000ml) Физраствор для в/в вливания (1000 мл) Solución Salina IV (1000ml) @@ -996,28 +1150,34 @@ Kochsalzlösung (1000ml) 0,9%-os sósvíz-infúzió (1000ml) Soluzione salina IV (1000ml) + Soro IV (1000ml) + Fyziologický roztok (1000ml) - + Saline IV, for restoring a patients blood - Пакет физраствора для возмещения объема потерянной крови + Пакет физраствора для возмещения объёма потерянной крови Solución salina intravenosa, para restaurar el volumen sanguíneo Solution saline 0.9% IV, pour rétablir temporairement la tension artérielle Sól fizjologiczna, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta 0,9%-os sósvíz-infúzió, a páciens vérmennyiségének helyreállítására Soluzione salina, usata per ripristinare sangue nei pazienti. Kochsalzlösung, ein medizinisches Volumenersatzmittel + Solução Salina Intravenosa 0.9%, para restaurar o volume de sangue temporariamente. + Fyziologický roztok se aplikuje intravenózně a slouží k obnově pacientovi krve - + A medical volume-replenishing agent introduced into the blood system through an IV infusion. - Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания + Пакет физиологического раствора для возмещения объёма потерянной крови путем внутривенного вливания Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. Un remplacant temporaire pour rétablir la tension artérielle lors de perte sanguine, administré par intra-veineuse Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). Egy orvosi térfogat-helyreállító készítmény, melyet intravénás módon lehet a szervezetbe juttatni. Una soluzione medica per ripristinare il volume del sangue introdotta tramite trasfusione IV. Ein medizinisches Volumenersatzmittel, dass durch einen intravenösen Zugang in den Blutkreislauf verabreicht wird. + Uma reposição temporaria para restaurar a pressão arterial perdida por perda de sangue. + Fyziologický roztok se využívá nejčastěji jako infuze při dehydrataci organismu. - + Saline IV (500ml) Физраствор для в/в вливания (500 мл) Salino IV (500ml) @@ -1026,8 +1186,10 @@ Kochsalzlösung (500ml) 0,9%-os sósvíz-infúzió (500ml) Soluzione salina IV (500ml) + Soro IV (1000ml) + Fyziologický roztok (500ml) - + Saline IV (250ml) Физраствор для в/в вливания (250 мл) Salino IV (250ml) @@ -1036,8 +1198,10 @@ Kochsalzlösung (250ml) 0,9%-os sósvíz-infúzió (250ml) Soluzione salina IV (250ml) + Soro IV (1000ml) + Fyziologický roztok (250ml) - + Basic Field Dressing (QuikClot) Первичный перевязочный пакет (QuikClot) Vendaje básico (QuickClot) @@ -1046,8 +1210,10 @@ Verbandpäckchen(Gerinnungsmittel) Általános zárókötszer (QuikClot) Bendaggio emostatico (QuikClot) + Bandagem básica (Coagulante) + Hemostatický obvaz (QuikClot) - + QuikClot bandage Гемостатический пакет QuikClot Vendaje QuikClot @@ -1056,8 +1222,10 @@ Bandage mit Gerinnungsmittel QuikClot kötszer Bendaggio emostatico (QuikClot) + Bandagem com agente coagulante + Hemostatický obvaz (QuikClot) - + Hemostatic bandage with coagulant that stops bleeding. Медицинский коагулянт для экстренной остановки кровотечения Un bandage aidant à coaguler les saignements mineurs à moyens. @@ -1066,18 +1234,22 @@ Verband mit Gerinnungsmittel, um starke Blutung zu behandeln. Hemostatikus kötszer egy vérzésgátló anyaggal. Bendaggio emostatico con coagulante che permette di arrestare perdite di sangue + Bandagem Hemostática com coagulante que controla hemorragia médias e grandes com risco de vida. + Hemostatický obvaz určený k zástavě krvácení - + Personal Aid Kit Аптечка + Trousse de premiers soins Equipo de primeros auxilios - Équipement de support vital Apteczka osobista Persönliches Verbandpäckchen Elsősegélycsomag Pronto soccorso personale + Kit De Primeiros Socorros Pessoal + Osobní lékárnička - + Includes various treatment kit needed for stitching or advanced treatment Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. Incluye material médico para tratamientos avanzados @@ -1086,20 +1258,34 @@ Beinhaltet medizinisches Material für fortgeschrittene Behandlung und zum Nähen. Változatos segédfelszereléseket tartalmaz sebvarráshoz és haladó elsősegélynyújtáshoz Include vario materiale medico per trattamenti avanzati. + Inclui vários tratamentos materiais para custura e tratamento avançado + Osobní lékárnička obsahuje zdravotnický materiál umožňující šití a pokročilejší ošetřování raněných - + Personal Aid Kit for in field stitching or advanced treatment W znacznym stopniu poprawia stan pacjenta Полевая аптчека для продвинутого лечения и зашивания ран + Persönliches Verbandspäckchen zum ambulanten Nähen und fortgeschrittener Behandlung. + Trousse de premiers soins pour coudre sur le terrain et traitements avancés. Equipo de primeros auxilios para sutura de campaña o tratamientos avanzados + Elsősegélycsomag, terepen való sebvarráshoz és haladó ellátáshoz + Kit de primeiros socorros para sutura ou tratamentos avançados + Osobní lékárnička obsahuje zdravotnický materiál umožňující šití a pokročilejší ošetřování raněných v poli + Pronto soccorso personale da campo per mettersi i punti o per trattamenti avanzati. - + Use Personal Aid Kit Verbandpäckchen benutzen Использовать аптечку + Utiliser la Trousse de premier soins + Użyj apteczki osobistej Usar equipo de primeros auxilios + Elsősegélycsomag használata + Usar o kit de primeiros socorros + Použít osobní lékárničku + Usa il pronto soccorso personale - + Surgical Kit Trousse chirurgicale Хирургический набор @@ -1108,8 +1294,10 @@ Operationsset Sebészeti készlet Kit chirurgico + Kit Cirurgico + Chirurgická sada - + Surgical Kit for in field advanced medical treatment Trousse chirurgicale pour le traitement sur le terrain Набор для хирургической помощи в полевых условиях @@ -1118,8 +1306,10 @@ Operationsset für fortgeschrittene medizinische Feldversorgung Sebészeti készlet komplex orvosi feladatok terepen való ellátására Kit chirurgico per trattamenti avanzati sul campo. + Kit Cirurgico para uso de tratamento médico avançado em campo + Chirurgická sada určená k pokročilejším zdravotnickým zákrokům v poli - + Surgical Kit for in field advanced medical treatment Набор для хирургической помощи в полевых условиях Kit quirúrgico para el tratamiento avanzado en el campo de batalla @@ -1128,14 +1318,22 @@ Trousse chirurgicale pour le traitement sur le terrain Sebészeti készlet komplex orvosi feladatok terepen való ellátására Kit chirurgico per trattamenti avanzati sul campo. + Kit Cirurgico para uso de tratamento médico avançado em campo. + Chirurgická sada určená k pokročilejším zdravotnickým zákrokům v poli - + Use Surgical Kit Operationsset benutzen + Usa kit chirurgico Использовать хирургический набор + Utiliser la trousse chirugicale + Zszyj rany Usar equipo quirúrgico + Sebészeti készlet használata + Použít chirurgickou sadu + Usar kit cirúrgico - + Bodybag Housse mortuaire Мешок для трупов @@ -1144,8 +1342,10 @@ Leichensack Hullazsák Sacca per corpi + Saco para cadáver + Pytel na mrtvoly - + A bodybag for dead bodies Housse de transport des corps Мешок для упаковки трупов @@ -1154,8 +1354,10 @@ Ein Leichensack für Tote Egy hullazsák a holttestek számára Una sacca nera per trasportare cadaveri. + Um saco para corpos mortos + Pytel na mrtvoly - + A bodybag for dead bodies Housse de transport des corps Мешок для упаковки трупов @@ -1164,8 +1366,10 @@ Ein Leichensack für Tote Egy hullazsák a holttestek számára Una sacca nera per trasportare cadaveri. + Um saco para corpos mortos. + Pytel na mrtvoly - + Blood Pressure Tension artérielle Артериальное давление @@ -1174,8 +1378,10 @@ Blutdruck Vérnyomás Pressione sanguigna + Pressão Arterial + Krevní tlak - + Checking Blood Pressure.. Mesure de la tension ... Проверка артериального давления ... @@ -1184,14 +1390,22 @@ Blutdruck kontrollieren... Vérnyomás megmérése... Controllando la pressione sanguigna.. + Aferindo Pressão Arterial... + Kontroluji krevní tlak ... - + %1 checked Blood Pressure: %2 %1 kontrollierte Blutdruck: %2 + %1 controllata pressione sanguigna: %2 %1 проверил артериальное давление: %2 + %1 à vérifié la tension: %2 + %1 sprawdził ciśnienie krwi: %2 %1 verificada la presión arterial: %2 + %1 ellenőrizte a vérnyomást: %2 + %1 zkontrolován krevní tlak: %2 + %1 verificou pressão arterial: %2 - + You checked %1 Vous diagnostiquez %1 Вы осмотрели раненого %1 @@ -1200,8 +1414,10 @@ Kontrolliert %1 A %1 ellenőrizve Hai diagnosticato %1 + Você verificou o paciente %1 + Zkontroloval jsi %1 - + You find a blood pressure of %2/%3 Vous avez trouvé une tension de %2/%3 Артериальное давление %2/%3 @@ -1210,8 +1426,10 @@ Hai riscontrato una pressione di %2/%3 Wyczuwasz ciśnienie krwi o wartości %2/%3 Der Blutdruck liegt bei %2/%3 + A Pressão Arterial é de %2/%3 + Našel jsi krevní tlak u %2/%3 - + You find a low blood pressure Tension basse Давление низкое @@ -1220,8 +1438,10 @@ Blutdruck ist niedrig A vérnyomás alacsony La pressione sanguigna è bassa + Pressão Arterial baixa + Naměřil jsi nízký krevní tlak - + You find a normal blood pressure Tension normale Давление нормальное @@ -1230,8 +1450,10 @@ Blutdruck ist normal A vérnyomás normális La pressione sanguigna è normale + Pressão Arterial normal + Naměřil jsi normální krevní tlak - + You find a high blood pressure Tension haute Давление высокое @@ -1240,8 +1462,10 @@ Blutdruck ist hoch A vérnyomás magas La pressione sanguigna è alta + Pressão Arterial Alta + Naměřil jsi vysoký krevní tlak - + You find no blood pressure Pas de tension Давления нет @@ -1250,8 +1474,10 @@ Patient hat keinen Blutdruck Nem észlelhető vérnyomás La pressione sanguigna è assente + Sem Pressão Arterial + Nenaměřil jsi žádný krevní tlak - + You fail to find a blood pressure Vous n'avez pas pu mesurer de tension Артериальное давление не определяется @@ -1260,32 +1486,58 @@ Blutdruck konnte nicht gefunden werden Nem sikerült a vérnyomás megmérése Manca strumento per misurare pressione sanguigna + Você falhou em aferir a Pressão Arterial + Nedokázal jsi změřit krevní tlak - + Low Niedrig + Basso Низкое + Faible + Niskie Baja + Alacsony + Nízký + Baixa - + Normal Normal + Normale Нормальное + Normale + Normalne Normal + Normális + Normální + Normal - + High Hoch + Alto Высокое + Haute + Wysokie Alta + Magas + Vysoký + Alta - + No Blood Pressure Kein Blutdruck + Nessuna Pressione Sanguigna Артериальное давление отсутствует + Aucune tension + Brak ciśnienia krwi Sin presión arterial + Nincs vérnyomás + Žádný krevní tlak + Sem pressão arterial - + Pulse Пульс Pouls @@ -1294,8 +1546,10 @@ Puls Pulzus Polso + Pulso + Tep - + Checking Heart Rate ... Vérification du rythme cardiaque ... Проверка пульса ... @@ -1304,8 +1558,10 @@ Kontrolliere Herzfrequenz ... Szívverés-szám mérése... Controllando il battito cardiaco ... + Aferindo Pulso ... + Kontroluji srdeční tep ... - + You checked %1 Вы осмотрели раненого %1 Vous examinez %1 @@ -1314,42 +1570,70 @@ Kontrolliert %1 A %1 ellenőrizve Hai diagnosticato %1 + Você aferiu o paciente %1 + Zkontroloval jsi %1 - + %1 checked Heart Rate: %2 %1 kontrollierte Herzfrequenz: %2 + %1 Controllata Frequenza Cardiaca: %2 %1 проверил пульс: %2 + %1 à vérifié le rythme cardiaque: %2 + %1 sprawdził tętno: %2 %1 verificado el ritmo cardíaco: %2 + %1 ellenőrizte a szívverés-számot: %2 + %1 zkontroloval srdeční tep: %2 + %1 verificou a frequência cardíaca: %2 - + Weak Schwach + Lento Слабый + Faible + Słabe Débil + Gyenge + Slabý + Fraca - + Normal Normal + Normale Нормальный + Normal + Normalne Normal + Normális + Normální + Normal - + Strong Stark + Veloce Сильный + Fort + Silne Fuerte + Erős + Silný + Forte - + You find a Heart Rate of %2 - Rythme carquiaque de %2 + Rythme cardiaque de %2 Пульс %2 уд./мин. El ritmo cardíaco es de %2 Wyczuwasz tętno o wartości %2 Herzfrequenz ist %2 A szívverés-szám %2 Il battito cardiaco è %2 + A Freqüência Cardíaca é de %2 + Nahmatal jsi srdeční tep u %2 - + You find a weak Heart Rate Rythme cardiaque faible Пульс слабый @@ -1358,8 +1642,10 @@ Schwacher Puls A szívverés-szám alacsony Hai riscontrato un debole battito cardiaco + Freqüência Cardíaca baixa + Nahmatal jsi slabý srdeční tep - + You find a strong Heart Rate Rythme cardiaque élevé Пульс учащенный @@ -1368,8 +1654,10 @@ Starker Puls A szívverés-szám magas Hai riscontrato un forte battito cardiaco + Freqüência Cardíaca normal + Nahmatal jsi silný srdeční tep - + You find a normal Heart Rate Rythme cardiaque normal Пульс в норме @@ -1378,8 +1666,10 @@ Normaler Puls A szívverés-szám normális Hai riscontrato un normale battito cardiaco + Freqüência Cardíaca alta + Nahmatal jsi normální srdeční tep - + You find no Heart Rate Pas de rythme cardiaque Пульс не прощупывается @@ -1388,8 +1678,10 @@ Kein Puls gefunden Nem észlelhető szívverés Hai riscontrato una assenza di battito cardiaco + Sem Freqüência Cardíaca + Nenašel jsi - + Response Etat de Conscience Реакция @@ -1398,8 +1690,10 @@ Ansprechbarkeit Reagálóképesség Risposta + Reação + Odezva - + You check response of patient Vous vérifiez la réponse du patient Вы проверяете реакцию раненого @@ -1408,8 +1702,10 @@ Du prüfst ob der Patient ansprechbar ist Ellenőrzöd a páciens reagálóképességét Controlli la risposta del paziente + Aferindo se o paciente tem reação... + Zkontroloval jsi reakci pacienta - + %1 is responsive %1 реагирует на раздражители %1 est conscient @@ -1418,8 +1714,10 @@ %1 ist anprechbar %1 reakcióképes %1 e' cosciente + %1 está respondendo + %1 odpovídá - + %1 is not responsive %1 не реагирует на раздражители %1 est inconscient @@ -1428,8 +1726,10 @@ %1 ist nicht ansprechbar %1 nem reagál %1 e' incosciente + %1 não está respondendo + %1 neodpovídá - + You checked %1 Вы осмотрели раненого %1 Vous avez examiné %1 @@ -1438,43 +1738,106 @@ Du hast versucht, %1 anzusprechen Megnézted %1-t Hai controllato %1 + Você aferiu o paciente %1 + Zkontroloval jsi %1 - + Patient %1<br/>is %2.<br/>%3.<br/>%4 + Paziente %1<br/>è %2.<br/>%3.<br/>%4 Пациент %1<br/>%2.<br/>%3.<br/>%4 + Patient %1<br/>ist %2.<br/>%3.<br/>%4 + Patient %1<br/>est %2.<br/>%3.<br/> + Pacjent %1<br/>jest %2.<br/>%3.<br/>%4 Paciente %1<br/>is %2.<br/>%3.<br/>%4 + A páciens, %1,<br/>%2.<br/>%3.<br/>%4 + Pacient %1<br/>je %2.<br/>%3.<br/>%4 + Paciente %1<br/>é %2.<br/>%3.<br/>%4 - + alive + Vivo жив + lebendig + vivant + żywy vivo + élő + naživu + vivo - + dead - мертв + Morto + мёртв muerto + tot + mort + martwy + halott + mrtev + morto - + He's lost some blood - Есть кровопотеря + Ha perso sangue Ha perdido un poco de sangre + Есть кровопотеря + Er hat etwas Blut verloren + Il a perdu du sang + Stracił trochę krwi + Valamennyi vért vesztett + Ztratil trochu krve + Ele perdeu um pouco de sangue - + + He's lost a lot of blood + Er hat viel Blut verloren + Sok vért vesztett + Stracił sporo krwi + Большая кровопотеря + Ha perdido mucha sangre + Il a perdu beaucoup de sang + Ztratil hodně krve + Ele perdeu muito sangue + Ha perso molto sangue + + He hasn't lost blood + Non ha perso sangue Нет кровопотери + Er hat kein Blut verloren + Il n'a pas perdu de sang + Nie stracił krwi No ha perdido sangre + Nem vesztett vért + Neztratil žádnou krev + Ele não perdeu sangue - + He is in pain + è affetto da dolore Испытывает боль + Er hat Schmerzen + Il souffre + Odczuwa ból Siente dolor + Fájdalmai vannak + Je v bolestech + Ele está com dor - + He is not in pain + Non è affetto da dolore Не испытывает боли + Er hat keine Schmerzen + Il ne souffre pas + Nie odczuwa bólu No siente dolor + Nincsenek fájdalmai + Nemá žádné bolesti + Ele não está com dor - + Bandaged Bandé Повязка наложена @@ -1483,8 +1846,10 @@ Bekötözve Bendato verbunden + Enfaixado + Obvázaný - + You bandage %1 (%2) Vous bandez %1 (%2) Вы перевязали раненого %1 (%2) @@ -1493,8 +1858,10 @@ Bekötözöd %1-t (%2) Stai bendando %1 (%2) Du verbindest %1 (%2) + Você aplica bandagem no paciente %1 (%2) + Obvazuješ %1 (%2) - + %1 is bandaging you %1 vous bande %1 перевязывает вас @@ -1503,8 +1870,10 @@ %1 bekötöz téged %1 ti sta bendando %1 verbindet dich + %1 está aplicando uma bandagem em você + %1 tě obvazuje - + You start stitching injuries from %1 (%2) Вы зашиваете ранения от %1 (%2) Du nähst die Wunden von %1 (%2) @@ -1513,8 +1882,10 @@ Zszywasz rany %1 (%2) Elkezded összevarni %1 sérüléseit (%2) Stai suturando le ferite di %1 (%2) + Você começa a suturar os ferimentos do %1 (%2) + Zašíváš rány %1 (%2) - + Stitching Наложение швов Suturando @@ -1523,8 +1894,10 @@ Szycie Összevarrás Suturando + Suturando... + Šití - + You treat the airway of %1 Вы интубируете раненого %1 Estás intubando a %1 @@ -1533,8 +1906,10 @@ Udrażniasz drogi oddechowe %1 Kezeled %1 légútját Controlli le vie respiratorie di %1 + Você entuba o %1 + Ošetřuješ dýchací cesty %1 - + Airway Дыхательные пути Vías aéreas @@ -1543,8 +1918,10 @@ Voies respiratoires Légút Vie respiratorie + Vias Aéreas + Dýchací cesty - + %1 is treating your airway %1 проводит вам интубацию %1 traite vos voies respiratoires @@ -1553,8 +1930,10 @@ %1 behandelt deine Atemwege %1 kezeli a légútadat %1 ti sta trattando le vie respiratorie + %1 está te entubando + %1 ošetřuje tvoje dýchací cesty - + Drag Ziehen Arrastrar @@ -1566,7 +1945,7 @@ Arrastar Trascina - + Carry Tragen Cargar @@ -1578,7 +1957,7 @@ Carregar Trasporta - + Release Loslassen Soltar @@ -1587,13 +1966,13 @@ Отпустить Déposer Elengedés - Largar + Soltar Rrilascia - + Load Patient Into Patient Einladen - Cargar el paciente en + Cargar al paciente en Załaduj pacjenta Naložit pacianta do Погрузить пациента в @@ -1602,10 +1981,10 @@ Carregar Paciente Em Carica paziente nel - + Unload Patient Patient Ausladen - Descargar el paciente + Descargar al paciente Wyładuj pacjenta Vyložit pacienta Выгрузить пациента @@ -1616,25 +1995,29 @@ Unload patient - Descargar el paciente + Descargar al paciente Выгрузить пациента Patient Ausladen Wyładuj pacjenta Débarquer le patient Sebesült kihúzása Scarica il paziente + Descarregar Paciente + Vyložit pacienta Load patient - Cargar el paciente en + Cargar al paciente en Погрузить пациента Patient Einladen Załaduj pacjenta Embarquer le patient Sebesült berakása Carica il paziente + Carregar Paciente Em + Naložit pacienta - + Place body in bodybag Colocar cuerpo en bolsa para cadáveres Поместить тело в мешок для трупов @@ -1643,8 +2026,10 @@ Mettre le corps dans la housse mortuaire Test hullazsákba helyezése Metti il corpo nella sacca per cadaveri + Colocar corpo dentro do saco para cadáver + Umístni tělo do pytle na mrtvoly - + Placing body in bodybag Colocando cuerpo en bolsa para cadáveres Упаковка тела ... @@ -1653,8 +2038,10 @@ Placement du corps dans la housse Test hullazsákba helyezése ... Stai mettendo il corpo nella sacca + Colocando corpo dentro do saco para cadáver... + Umístňuji tělo do pytle na mrtvoly - + %1 has bandaged patient %1 has vendado al paciente %1 перевязал пациента @@ -1663,8 +2050,10 @@ %1 a pansé le patient %1 bekötözte a pácienst %1 ha bendato il paziente + %1 aplicou bandagem no paciente + %1 již obvázal pacienta - + %1 used %2 %1 usó %2 %1 benutzt %2 @@ -1673,18 +2062,22 @@ %1 utilise %2 %1 használta a %2-t %1 ha usato %2 + %1 usou %2 + %1 použil %2 - + %1 has given an IV - %1 has puesto una IV - %1 провел переливание + %1 провёл переливание + %1 ha puesto una IV %1 hat eine Infusion verabreicht %1 podał IV %1 a administré une IV %1 infúziót adott %1 ha somministrato una IV + %1 aplicou um intravenoso + %1 již aplikoval IV - + %1 applied a tourniquet %1 aplicado torniquete %1 наложил жгут @@ -1693,6 +2086,8 @@ %1 a appliqué un garrot %1 felhelyezett egy érszorítót %1 ha applicato un laccio emostatico + %1 aplicou um torniquete + %1 použil škrtidlo Heavily wounded @@ -1702,6 +2097,9 @@ Gravemente ferito Gravemente herido Lourdement blessé + Erősen sérült + Těžce zraněn + Gravemente ferido Lightly wounded @@ -1711,6 +2109,9 @@ Leggermente ferito Levemente herido Légèrement blessé + Enyhén sérült + Lehce zraněn + Levemente ferido Very lightly wounded @@ -1720,6 +2121,9 @@ Ferito lievemente Muy levemente herido Très légèrement blessé + Nagyon enyhén sérült + Velmi lehce zraněn + Muito levemente ferido Head @@ -1729,6 +2133,9 @@ Testa Cabeza Tête + Fej + Hlava + Cabeça Torso @@ -1738,6 +2145,9 @@ Torso Torso Torse + Testtörzs + Trup + Torso Left Arm @@ -1747,6 +2157,9 @@ Braccio sinistro Brazo izquierdo Bras gouche + Bal kar + Levá ruka + Braço Esquerdo Right Arm @@ -1756,6 +2169,9 @@ Braccio destro Brazo derecho Bras droit + Jobb kar + Pravá ruka + Braço Direito Left Leg @@ -1765,6 +2181,9 @@ Gamba sinistra Pierna izquierda Jambe gauche + Bal láb + Levá noha + Perna Esquerda Right Leg @@ -1774,6 +2193,9 @@ Gamba destra Pierna derecha Jambe droite + Jobb láb + Pravá noha + Perna Direita Pain Effect Type @@ -1783,6 +2205,9 @@ Pain Effect Type Tipo de efecto de dolor Type d'effet de douleur + Fájdalom-effekt típusa + Tipo do efeito de dor + Typ bolesti - efekt Colour Flashing @@ -1792,6 +2217,9 @@ Colore lampeggiante Parpadeo de color Flash de couleur + Színvillódzás + Flash de cor + Blikající barva Chromatic Aberration @@ -1801,204 +2229,477 @@ Aberrazione cromatica Aberración cromática Aberration chromatique + Kromatikus aberráció + Chromatická aberace + Aberração Cromática + + + Style of menu (Medical) + Styl menu medycznego + Style de menu (Médical) + Menü-Stil (Medical) + Вид меню (медицина) + Tipo de menú (Medico) + Styl menu (Zdravotní) + Estilo do menu (Médico) + Menü stílusa (Orvosi) + Stile del menù (medico) + + + Select the type of menu you prefer; default 3d selections or radial. + Wybierz rodzaj menu, który preferujesz: domyślne pozycje 3D lub radialne + Selctionne le type de menu préféré; par défaut la sélection 3D ou radiale + Wähle den Menü-Stil: Standard 3D-Selektion oder kreisförmig. + Выберите тип меню: стандартный вариант (3D) или радиальный + Selecciona el tipo de menú que prefieres: selecciones 3d por defecto o radial. + Selecione o tipo de menu que você prefere; padrão seleções 3d ou radial. + Válaszd ki a neked megfelelő menüt: Alapértelmezett 3D válogatás, vagy kerek. + Zvolte typ menu: základní 3D výběr nebo kruhový + Seleziona il tipo di menù che preferisci: selezione 3d predefinita o radiale. + + + Selections (3d) + Pozycje (3D) + sélections (3D) + 3D-Selektion + Стандартный (3D) + Selecciones (3d) + Seleção (3d) + Választékok (3D) + 3D výběr + Selezione (3D) + + + Radial + Radialne + Radiale + Kreisförmig + Радиальный + Radial + Radial + Kerek + Kruhový + Radiale Scrape Kratzer + Scorticatura Ссадина + Eraflure + Draśnięcie Arañazo + Horzsolás + Raspão + Odřenina Minor Scrape Kleiner Kratzer + Minima Scorticatura Малая ссадина + Petite éraflure + Pomniejsze draśnięcie Arañazo menor + Kis horzsolás + Raspão leve + Malá odřenina Medium Scrape Mittlerer Kratzer + Media Scorticatura Средняя ссадина + Moyenne éraflure + Średnie draśnięcie Arañazo medio + Közepes horzsolás + Raspão médio + Středně velká odřenina Large Scrape Großer Kratzer + Alta Scorticatura Большая ссадина + Grande éraflure + Duże draśnięcie Arañazo severo + Nagy horzsolás + Raspão grave + Velká odřenina Avulsion Avulsion + Avulsione Рваная рана + Avulsion + Rana płatowa Avulsión + Leszakadás + Avulsão + Avulze Minor Avulsion Kleine Avulsion + Minima Avulsione Малая рваная рана + Petite avulsion + Pomniejsza rana płatowa Avulsión menor + Kis leszakadás + Avulsão leve + Malá avulze Medium Avulsion Mittlere Avulsion + Media Avulsione Средняя рваная рана + Moyenne avulsion + Średnia rana płatowa Avulsión media + Közepes leszakadás + Avulsão média + Střední avulze Large Avulsion Große Avulsion + Alta Avulsione Большая рваная рана + Grande avulsion + Duża rana płatowa Avulsión severa + Nagy leszakadás + Avulsão grave + Velká avulze Bruise Prellung + Contusione Ушиб + Hématome + Stłuczenie Contusión + Zúzódás + Contusão + Modřina Minor Bruise Kleine Prellung + Minima Contusione Малый ушиб + Petit hématome + Pomniejsze stłuczenie Contusión menor + Kis zúzódás + Contusão leve + Malá modřina Medium Bruise Mittlere Prellung + Media Contusione Средний ушиб + Hématome moyen + Średnie stłuczenie Contusión media + Közepes zúzódás + Contusão média + Středně velká modřina Large Bruise Große Prellung + Alta Contusione Большой ушиб + Hématome important + Duże stłuczenie Contusión severa + Nagy zúzódás + Contusão grave + Velká modřina Crushed tissue Quetschverletzung + Tessuto Schiacciato Компресионная травма + Tissu écrasé + Zgniecienie tkanek miękkich Tejido triturado + Zúzott szövet + Tecido esmagado + Zhmoždění měkkých tkání Minor crushed tissue Kleine Quetschverletzung + Minimo Tessuto Schiacciato Малая компрессионная травма + Tissu écrasé léger + Pomniejsze zgniecienie tkanek miękkich Tejido triturado menor + Kis zúzott szövet + Tecido esmagado leve + Malé zhmoždění měkkých tkání Medium crushed tissue Mittlere Quetschverletzung + Medio Tessuto Schiacciato Средняя компрессионная травма + Tissu écrasé moyen + Średnie zgniecienie tkanek miękkich Tejido triturado medio + Közepes zúzott szövet + Tecido esmagado médio + Střední zhmoždění měkkých tkání Large crushed tissue Große Quetschverletzung + Alto Tessuto Schiacciato Большая компрессионная травма + Tissu écrasé large + Duże zgniecienie tkanek miękkich Tejido triturado severo + Nagy zúzött szövet + Tecido esmagado grave + Velké zhmoždění měkkých tkání Cut Schnittwunde + Taglio Резаная рана + Coupure + Rana cięta Corte + Vágás + Corte + Řezná rána Small Cut Kleine Schnittwunde + Piccolo Taglio Малая резаная рана + Pomniejsza rana cięta Corte menor + Kis vágás + Petite coupure + Corte leve + Malá řezná rána Medium Cut Mittlere Schnittwunde + Medio Taglio Средняя резаная рана + Średnia rana cięta Corte mediano + Közepes vágás + Moyenne coupure + Corte médio + Střední řezná rána Large Cut Große Schnittwunde + Grande Taglio Большая резаная рана + Duża rana cięta Corte severo + Nagy vágás + Large coupure + Corte grave + Velká řezná rána Tear Riss + Strappo Рваная рана + Rozerwanie skóry + Déchirure Desgarro + Szakadás + Ruptura + Tržná rána Small Tear Kleiner Riss + Piccolo Strappo Малая рваная рана + Pomniejsze rozerwanie skóry + Petite Déchirure Desgarro menor + Kis szakadás + Ruptura leve + Malá tržná rána Medium Tear Mittlerer Riss + Medio Strappo Средняя рваная рана + Średnie rozerwanie skóry Desgarro medio + Közepes szakadás + Moyenne déchirure + Ruptura média + Střední tržná rána Large Tear Großer Riss + Grande Strappo Большая рваная рана + Duże rozerwanie skóry Desgarro severo + Nagy szakadás + Large déchirure + Ruptura grave + Velká tržná rána Velocity Wound Ballistisches Trauma + Velocità Ferita Огнестрельная рана + Rana postrzałowa + Blessure de vélocité Herida de bala + Lőtt seb + Ferimento por projétil de arma de fogo + Střelné poranění Smal Velocity Wound Kleines Ballistisches Trauma + Lenta Velocità Ferita Малая огнестрельная рана + Pomniejsza rana postrzałowa Herida de bala menor + Kis lőtt seb + Petite blessure de vélocité + Ferimento leve por projétil de arma de fogo + Malé střelné poranění Medium Velocity Wound Mittleres Ballistisches Trauma + Media Velocità Ferita Средняя огнестрельная рана + Średnia rana postrzałowa Herida de bala media + Közepes lőtt seb + Moyenne blessure de vélocité + Ferimento médio por projétil de arma de fogo + Střední střelné poranění Large Velocity Wound Großes Ballistisches Trauma + Alta Velocità Ferita Большая огнестрельная рана + Duża rana postrzałowa Herida de bala severa + Nagy lőtt seb + Large blessure de vélocité + Ferimento grave por projétil de arma de fogo + Velké střelné poranění Puncture Wound Stichwunde + Puntura Ferita Колотая рана + Rana kłuta + Blessure de perforation Herida punzante + Szúrt seb + Ferimento por perfuração + Bodná rána Minor Puncture Wound Kleine Stichwunde + Piccola Puntura Ferita Малая колотая рана + Pomniejsza rana kłuta Herida punzante menor + Kis szúrt seb + Légère blessure de perforation + Ferimento leve por perfuração + Malá bodná rána Medium Puncture Wound Mittlere Stichwunde + Media Puntura Ferita Средняя колотая рана + Średnia rana kłuta Herida punzante media + Közepes szúrt seb + Moyenne blessure de perforation + Ferimento médio por perfuração + Střední bodná rána Large Puncture Wound Große Stichwunde + Grande Puntura Ferita Большая колотая рана + Duża rana kłuta Herida punzante severa + Nagy szúrt seb + Large blessure de perforation + Ferimento grave por perfuração + Velká bodná rána Broken Femur Gebrochener Oberschenkelknochen + Femore Rotto Перелом + Zkłamana kość udowa + Fémur cassé Femur roto + Törött combcsont + Fêmur quebrado + Zlomená stehenní kost + + + Treating ... + Behandeln ... + Ellátás ... + Leczenie ... + Traitement ... + Лечение ... + Tratando ... + Tratando... + Ošetřuji ... + Curando ... + + + Removing Tourniquet ... + Tourniquet entfernen ... + Zdejmowanie stazy ... + Quitando torniquete ... + Retire le tourniquet ... + Removendo torniquete... + Érszorító eltávolítása ... + Sundavám škrtidlo ... + Снятие жгута ... + Togliendo il laccio emostatico ... diff --git a/addons/medical/ui/triagecard.hpp b/addons/medical/ui/triagecard.hpp index a93440d13a..c4d3145964 100644 --- a/addons/medical/ui/triagecard.hpp +++ b/addons/medical/ui/triagecard.hpp @@ -49,7 +49,7 @@ class GVAR(triageCard) { font = "PuristaMedium"; colorText[] = {0,0,0,1}; colorBackground[] = {0,0,0,0}; - text = "$STR_ACE_MEDICAL_ACTIONS_TriageCard"; + text = "$STR_ACE_Medical_Actions_TriageCard"; }; class TriageList: ACE_gui_listBoxBase { idc = 200; @@ -103,7 +103,7 @@ class GVAR(triageCard) { y = 0; w = 0; h = 0; - text = $STR_ACE_MEDICAL_TRIAGE_STATUS_NONE; + text = $STR_ACE_Medical_Triage_Status_None; style = 0x02; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; @@ -121,7 +121,7 @@ class GVAR(triageCard) { y = 0; w = 0; h = 0; - text = $STR_ACE_MEDICAL_TRIAGE_STATUS_MINOR; + text = $STR_ACE_Medical_Triage_Status_Minor; style = 0x02; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; @@ -139,7 +139,7 @@ class GVAR(triageCard) { y = 0; w = 0; h = 0; - text = $STR_ACE_MEDICAL_TRIAGE_STATUS_DELAYED; + text = $STR_ACE_Medical_Triage_Status_Delayed; style = 0x02; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; @@ -157,7 +157,7 @@ class GVAR(triageCard) { y = 0; w = 0; h = 0; - text = $STR_ACE_MEDICAL_TRIAGE_STATUS_IMMEDIATE; + text = $STR_ACE_Medical_Triage_Status_Immediate; style = 0x02; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; @@ -175,7 +175,7 @@ class GVAR(triageCard) { y = 0; w = 0; h = 0; - text = $STR_ACE_MEDICAL_TRIAGE_STATUS_DECEASED; + text = $STR_ACE_Medical_Triage_Status_Deceased; style = 0x02; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; diff --git a/addons/microdagr/XEH_clientInit.sqf b/addons/microdagr/XEH_clientInit.sqf index 99c94b4512..587bf85ef5 100644 --- a/addons/microdagr/XEH_clientInit.sqf +++ b/addons/microdagr/XEH_clientInit.sqf @@ -4,7 +4,7 @@ if (!hasInterface) exitWith {}; //Add Keybinds: -["ACE3", QGVAR(openGPS), (localize "STR_ACE_microdagr_toggleUnit"), +["ACE3 Equipment", QGVAR(openGPS), (localize "STR_ACE_microdagr_toggleUnit"), { // canInteractWith (can use on map) if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -17,7 +17,7 @@ if (!hasInterface) exitWith {}; {false}, [0xC7, [false, false, false]], false] call cba_fnc_addKeybind; //Home Key -["ACE3", QGVAR(closeGPS), (localize "STR_ACE_microdagr_closeUnit"), +["ACE3 Equipment", QGVAR(closeGPS), (localize "STR_ACE_microdagr_closeUnit"), { // canInteractWith (can use on map) if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 2c5eda7c41..af2b303f2b 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -10,7 +10,8 @@ MicroDAGR GPS MicroDAGR GPS MicroDAGR GPS - MicroDAGR GPS + GPS MicroDAGR + GPS MicroDAGR MicroDAGR advanced GPS receiver @@ -21,7 +22,8 @@ Récepteur GPS MicroDAGR MicroDAGR pokročílá GPS příjímač MicroDAGR fejlett GPS vevőegység - MicroDAGR ricevitore GPS avanzato + Ricevitore GPS avanzato MicroDAGR + Recepitor GPS avançado MicroDAGR Angular Unit: @@ -33,6 +35,7 @@ Úhlová jednotka: Szögmértékegység: Unità angolare: + Unidade Angular: Mils @@ -43,7 +46,8 @@ Mils Mils Mil - Miglia + Mils + Mils: Show Waypoints On Map: @@ -55,6 +59,7 @@ Ukázat waypointy na mapě: Útvonalpontok mutatása a térképen: Mostra waypoint sulla mappa: + Mostrar Waypoints no mapa: Degrees @@ -66,6 +71,7 @@ Stupně Fok Gradi + Graus On @@ -101,6 +107,7 @@ Napiš souřadnice: Add meg a rácskoordinátákat: Introduci griglia coordinate: + Digite as Ccords. do Grid Name of [%1] @@ -112,6 +119,7 @@ Název [%1] [%1] neve Nome di [%1] + Nome do [%1] MGRS-New @@ -123,6 +131,7 @@ MGRS-Nový MGRS-új Nuovo MGRS + MGRS-Novo WGD @@ -134,6 +143,7 @@ WGD WGD WGD + WGD Range: @@ -145,6 +155,7 @@ Vzdálenost: Távolság: Distanza: + Distância: Compass Direction @@ -156,6 +167,7 @@ Azimut: Irányszög Azimut + Direção na bússula Mark @@ -167,6 +179,7 @@ Označit Jelölés Marca + Marca Waypoints @@ -178,6 +191,7 @@ Point de passage Útvonalpontok waypoints + Waypoints Connect To @@ -189,6 +203,7 @@ Connecter Csatlakozás Collega a + Conectar à Settings @@ -200,6 +215,7 @@ Ustawienia Beállítások Impostaizoni + Opções SetWP @@ -211,6 +227,7 @@ Définir point de passage UP Beállítása Definisci WayPoints + Definir WP Add @@ -222,6 +239,7 @@ Ajouter Hozzáadás Aggiungi + Adicionar Delete @@ -233,17 +251,19 @@ Excluir Удалить Borrar + Törlés Toggle MicroDAGR Display Mode MicoDAGR Anzeigemodus wechseln - Conmutar modo de pantalla del MicroDAGR + Cambiar modo de pantalla del MicroDAGR Сменить режим показа MicroDAGR Przełącz GUI MicroDAGR Basculer le mode d'affichage MicroDAGR Přepnout zobrazení MircroDAGRu MicroDAGR kijelzési mód váltása Alterna modalità display MicroDAGR + Alternar Modo de Display do MicroDAGR Show MicoDAGR @@ -255,6 +275,7 @@ Afficher MicroDAGR MicroDAGR mutatása Mostra MicroDAGR + Mostrar MicroDAGR Configure MicroDAGR @@ -266,6 +287,7 @@ Configurer MicroDAGR MicroDAGR konfigurálása ConfiguraMicroDAGR + Configurar MicroDAGR Close MicroDAGR @@ -277,6 +299,7 @@ Fermer MicroDAGR MicroDAGR elrejtése Chiudi MicroDAGR + Fechar MicroDAGR diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp index 301795b8d7..0d9ef54d07 100644 --- a/addons/missileguidance/CfgVehicles.hpp +++ b/addons/missileguidance/CfgVehicles.hpp @@ -19,6 +19,7 @@ class CfgVehicles { }; class ACE_Comanche_Test : B_Heli_Attack_01_F { + scope = 1; displayName = "ACE_Comanche_Test"; author = "ACE Team"; class Library { diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index 7ada1d4442..a184ba1ef4 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -7,7 +7,7 @@ if(GVAR(enabled) < 1 || {!local _projectile} ) exitWith { false }; if( !isPlayer _shooter && { GVAR(enabled) < 2 } ) exitWith { false }; -private["_config", "_enabled", "_target", "_seekerType", "_attackProfile"]; +private["_config", "_configs", "_enabled", "_target", "_seekerType", "_attackProfile"]; private["_args", "_canUseLock", "_guidingUnit", "_launchPos", "_lockMode", "_targetPos", "_vanillaTarget"]; PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); @@ -15,7 +15,11 @@ PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); // Bail on not missile if(! (_ammo isKindOf "MissileBase") ) exitWith { false }; -_config = configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON); +//Verify ammo has explicity added guidance config (ignore inheritances) +_configs = configProperties [(configFile >> "CfgAmmo" >> _ammo), QUOTE(configName _x == QUOTE(QUOTE(ADDON))), false]; +if( (count _configs) < 1) exitWith {}; + +_config = (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON)); _enabled = getNumber ( _config >> "enabled"); // Bail if guidance is not enabled @@ -27,6 +31,10 @@ _seekerType = (vehicle _shooter) getVariable [QGVAR(seekerType), nil]; _attackProfile = (vehicle _shooter) getVariable [QGVAR(attackProfile), nil]; _lockMode = (vehicle _shooter) getVariable [QGVAR(lockMode), nil]; +// @TODO: make this vehicle shooter, but we need to differentiate where its set in ace_laser +_laserCode = _shooter getVariable [QEGVAR(laser,code), ACE_DEFAULT_LASER_CODE]; +_laserInfo = [_laserCode, ACE_DEFAULT_LASER_WAVELENGTH, ACE_DEFAULT_LASER_WAVELENGTH]; + _launchPos = getPosASL (vehicle _shooter); TRACE_3("Begin guidance", _target, _seekerType, _attackProfile); @@ -67,7 +75,8 @@ _args = [_this, [_target, _targetPos, _launchPos], _seekerType, _attackProfile, - _lockMode + _lockMode, + _laserInfo ], [ getNumber ( _config >> "minDeflection" ), diff --git a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf index 7aafad1114..6297d21dfa 100644 --- a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf @@ -2,17 +2,19 @@ #include "script_component.hpp" EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -private["_angleFov", "_canSeeTarget", "_foundTargetPos", "_laserResult", "_launchParams", "_seekerParams", "_seekerTargetPos", "_sensorPos", "_target"]; +private["_angleFov", "_canSeeTarget", "_foundTargetPos", "_laserResult", "_launchParams", "_seekerParams", "_laserCode", "_laserParams", "_seekerTargetPos", "_sensorPos", "_target"]; _seekerTargetPos = _this select 0; _launchParams = _this select 1; _seekerParams = _launchParams select 3; _angleFov = _seekerParams select 0; +_laserParams = (_launchParams select 1) select 5; +TRACE_2("", _launchParams, _laserParams); if(!isNil "_target") then { // Handle AI or moving vanilla lasers _foundTargetPos = getPosASL _target; } else { - _laserResult = [(getPosASL _projectile), (velocity _projectile), _angleFov, [ACE_DEFAULT_LASER_WAVELENGTH,ACE_DEFAULT_LASER_WAVELENGTH], ACE_DEFAULT_LASER_CODE] call EFUNC(laser,seekerFindLaserSpot); + _laserResult = [(getPosASL _projectile), (velocity _projectile), _angleFov, [(_laserParams select 1),(_laserParams select 2)], (_laserParams select 0)] call EFUNC(laser,seekerFindLaserSpot); _foundTargetPos = _laserResult select 0; TRACE_1("Search", _laserResult); }; diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index e0923981f3..dcb2be486c 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -3,7 +3,7 @@ Advanced Missile Guidance - Avanzada Misiles Orientación + Guiado Avanzado de Misiles Guidage avancé de missile Zaawansowane naprowadzanie rakiet Erweitertes Raketenlenksystem @@ -16,79 +16,86 @@ Advanced missile guidance, or AMG, provides multiple enhancements to missile locking and firing. It is also a framework required for missile weapon types. Zaawansowane namierzanie rakiet, lub ZNR, dostarcza wiele poprawek do systemu namierzania rakiet oraz dodaje nowe tryby strzału. Jest to wymagana opcja dla broni rakietowych. - Guía de misiles avanzada, o AMG en sus siglas en inglés, ofrece múltiples mejoras en el fijado y disparo de misiles. Es también un framework requerido para armas de tipo misil. + Guida dei missili avanzata, o AMG, offre diversi miglioramenti alla teleguida di missili. E' anche un sistema necessario per i tipi di armi missile. + Продвинутое наведение ракет, или ПНР, обеспечивает множество усовершествований для наведения и стрельбы ракет. Также, это система, необходимая для всех ракетных типов оружия. + Guiado Avanzado de Misiles, o AMG en sus siglas en inglés, ofrece múltiples mejoras en el fijado y disparo de misiles. Es también un sistema requerido para armas de tipo misil. + Das Erweiterte Raketenlenksystem, auch ERls genannt, bietet viele Verbesserungen zum Aufschalten und Feuern mittels gelenkten Raketen. + Le guidage avancé de missile, ou AMG en anglais, apporte de multiple améliorations au verouillage et au tir de missiles. C'est aussi un framework requis pour tout arme de type missile. + A fejlett rakétairányító (vagy AMG) többféle módosítást tartalmaz a rakéták célkövetéséhez és tüzeléséhez. Ez egy szükséges keresztrendszer a rakéta-alapú fegyverekhez. + Orientação avançada de mísseis ou OAM, fornece vários aprimoramentos para travamento de mísseis e disparos. Também é um sistema requerido para disparar armas que utilizem mísseis. + Pokočilé navádění raket (AMG) poskytuje několik vylepšení pro lepší zaměření a následnou střelbu. Je to prvek vyžadovaný u typu zbraní jako jsou rakety. Hydra-70 DAGR Missile - + Misil Hydra-70 DAGR Hydra-70 DAGR Hydra-70 DAGR Hydra-70 DAGR Rackete Hydra-70 DAGR Missile Hydra-70 DAGR - + Míssil Hydra-70 DAGR Hydra-70 DAGR rakéta Hydra-70 DAGR DAGR - + DAGR DAGR DAGR DAGR DAGR DAGR - + DAGR DAGR DAGR Hydra-70 DAGR Laser Guided Missile - - Missile à guidage Hydra-70 DAGR + Misil guiado por láser Hydra-70 DAGR + Missile à guidage laser Hydra-70 DAGR Laserowo naprowadzana rakieta Hydra-70 DAGR Hydra-70 DAGR lasergelenkte Rakete Hydra-70 DAGR laserem naváděná střela Hydra-70 DAGR missile guida laser - - Hydra-70 DAGR lézer-irányított rakéta + Míssil guiado a laser Hydra-70 DAGR + Hydra-70 DAGR lézer-irányított rakéta Управляемая ракета лазерного наведения Hydra-70 DAGR Hellfire II AGM-114K Missile - + Misil Hellfire II AGM-114K Hellfire II AGM-114K Hellfire II AGM-114K Hellfire II AGM-114K Hellfire II AGM-114K Missile Hellfire II AGM-114K - - Hellfire II AGM-114K rakéta + Míssil Hellfire II AGM-114K + Hellfire II AGM-114K rakéta Hellfire II AGM-114K AGM-114K - + AGM-114K AGM-114K AGM-114K AGM-114K AGM-114K AGM-114K - + AGM-114K AGM-114K AGM-114K Hellfire II AGM-114K Laser Guided Missile - + Misil guiado por láser Hellfire II AGM-114K Missile à guidage laser Hellfire II AGM-114K Laserowo naprowadzana rakieta Hellfire II AGM-114K Hellfire II AGM-114K Lasergelenkte Rakete Hellfire II AGM-114K laserem naváděná střela Missile guida laser Hellfire II AGM-114K - - Hellfire II AGM-114K lézer-irányított rakéta + Míssil guiado a laser Hellfire II AGM-114K + Hellfire II AGM-114K lézer-irányított rakéta Управляемая ракета лазерного наведения Hellfire II AGM-114K - \ No newline at end of file + diff --git a/addons/missionmodules/CfgVehicles.hpp b/addons/missionmodules/CfgVehicles.hpp index 6a1dc71705..35a937c660 100644 --- a/addons/missionmodules/CfgVehicles.hpp +++ b/addons/missionmodules/CfgVehicles.hpp @@ -19,31 +19,31 @@ class CfgVehicles { class Arguments { class soundFiles { displayName = "Sounds"; - description = "Classnames of the ambiance sounds played. Seperated by ','. "; + description = "Class names of the ambiance sounds to be played. Seperated by ','"; typeName = "STRING"; defaultValue = ""; }; class minimalDistance { displayName = "Minimal Distance"; - description = "Minimal Distance"; + description = "Used for calculating a random position and sets the minimal distance between the players and the played sound file(s)"; typeName = "NUMBER"; defaultValue = 400; }; class maximalDistance { - displayName = "Maximal Distance"; - description = "Maximal Distance"; + displayName = "Maximum Distance"; + description = "Used for calculating a random position and sets the maximum distance between the players and the played sound file(s)"; typeName = "NUMBER"; defaultValue = 900; }; class minimalDelay { displayName = "Minimal Delay"; - description = "Minimal Delay between sounds played"; + description = "Minimal delay between sounds played"; typeName = "NUMBER"; defaultValue = 10; }; class maximalDelay { - displayName = "Maximal Delay"; - description = "Maximal Delay between sounds played"; + displayName = "Maximum Delay"; + description = "Maximum delay between sounds played"; typeName = "NUMBER"; defaultValue = 170; }; diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index c02d19aa5f..6e5643754c 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -26,39 +26,39 @@ _activated = [_this,2,true,[true]] call BIS_fnc_param; // We only play this on the locality of the logic, since the sounds are broadcasted across the network if (_activated && local _logic) then { _ambianceSounds = []; - _unparsedSounds = _logic getvariable ["soundFiles", ""]; - _minimalDistance = (_logic getvariable ["minimalDistance", 400]) max 1; - _maximalDistance = (_logic getvariable ["maximalDistance", 10]) max _minimalDistance; - _minDelayBetweensounds = (_logic getvariable ["minimalDelay", 10]) max 1; - _maxDelayBetweenSounds = (_logic getvariable ["maximalDelay", 170]) max _minDelayBetweensounds; - _volume = (_logic getvariable ["soundVolume", 30]) max 1; - _followPlayers = _logic getvariable ["followPlayers", false]; + _unparsedSounds = _logic getVariable ["soundFiles", ""]; + _minimalDistance = (_logic getVariable ["minimalDistance", 400]) max 1; + _maximalDistance = (_logic getVariable ["maximalDistance", 10]) max _minimalDistance; + _minDelayBetweensounds = (_logic getVariable ["minimalDelay", 10]) max 1; + _maxDelayBetweenSounds = (_logic getVariable ["maximalDelay", 170]) max _minDelayBetweensounds; + _volume = (_logic getVariable ["soundVolume", 30]) max 1; + _followPlayers = _logic getVariable ["followPlayers", false]; _splittedList = [_unparsedSounds, ","] call BIS_fnc_splitString; _nilCheckPassedList = ""; { - _x = [_x] call EFUNC(common,string_removeWhiteSpace); - _splittedList set [_foreachIndex, _x]; - }foreach _splittedList; + _x = [_x] call EFUNC(common,stringRemoveWhiteSpace); + _splittedList set [_forEachIndex, _x]; + }forEach _splittedList; _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; { - if (isclass (missionConfigFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); + if (isClass (missionConfigFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushBack (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); } else { - if (isclass (configFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); + if (isClass (configFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushBack ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); }; }; - }foreach _splittedList; + }forEach _splittedList; - if (count _ambianceSounds == 0) exitwith {}; + if (count _ambianceSounds == 0) exitWith {}; { if !([".", _x, true] call BIS_fnc_inString) then { - _ambianceSounds set [_foreachIndex, _x + ".wss"]; + _ambianceSounds set [_forEachIndex, _x + ".wss"]; }; - }foreach _ambianceSounds; + }forEach _ambianceSounds; [{ private ["_args", "_logic", "_ambianceSounds", "_minimalDistance", "_maximalDistance", "_minDelayBetweensounds", "_maxDelayBetweenSounds", "_volume", "_followPlayers","_lastTimePlayed", "_newPos"]; @@ -68,7 +68,7 @@ if (_activated && local _logic) then { _maxDelayBetweenSounds = _args select 5; _lastTimePlayed = _args select 8; - if (!alive _logic) exitwith { + if (!alive _logic) exitWith { [(_this select 1)] call cba_fnc_removePerFrameHandler; }; diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index 1c90842d5f..baf74fa2c4 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -58,8 +58,8 @@ class CfgVehicles { functionPriority = 0; class Arguments { class airResistanceEnabled { - displayName = "Air Resitance"; - description = "For Player Shots, Model Air Restiance and Wind Effects"; + displayName = "Air Resistance"; + description = "For Player Shots, Model Air Resistance and Wind Effects"; typeName = "BOOL"; defaultValue = 1; }; diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index e0ed44578d..fd2fe4aa4c 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -3,19 +3,51 @@ 82mm Rangetable + 82mm Distanztabelle + Tabela strzelnicza 82mm + Table de tir 82mm + 82 мм Таблица дальностей и прицелов Tabla de distancias de 82mm + 82mm hatótáv-tábla + Tabela de distâncias de para 82mm + 82mm Rangetable + Tavola di tiro 82mm Range Table for the MK6 82mm Mortar + Distanztabelle für den Mk6 82mm Mortar + Tabela strzelnicza dla moździerza 82mm MK6 + Table de tir pour le mortier MK6 82mm + Таблица дальностей и прицелов для MK6 82 мм мортиры Tabla de distancias para el mortero MK6 de 82mm + Hatótáv-tábla a MK6 82mm-es mozsárhoz + Tabela de distâncias para morteiro MK6 82mm + Rangetable pro MK6 82mm minomet + Tavola di tiro per il mortaio calibro 82mm MK6 Open 82mm Rangetable + Öffne 82mm Distanztabelle + Otwórz tabelę strzelniczą 82mm + Ouvrir la table de tir 82mm + Открыть 82 мм Таблицу дальностей и прицелов Abrir tabla de distancias de 82mm + 82mm hatótáv-tábla megnyitása + Abrir tabela de distâncias para 82mm + Otevřít 82mm Rangetable + Apri la tavola di tiro 82mm Charge + Ladung + Charge + Ładunek + Зарядить Carga + Töltés + Carregar + Nabít + Carica - \ No newline at end of file + diff --git a/addons/movement/XEH_postInit.sqf b/addons/movement/XEH_postInit.sqf index 224cd93273..0e451832d9 100644 --- a/addons/movement/XEH_postInit.sqf +++ b/addons/movement/XEH_postInit.sqf @@ -20,7 +20,7 @@ if (!hasInterface) exitWith {}; }] call EFUNC(common,addEventHandler); -["ACE3", QGVAR(climb), localize "STR_ACE_Movement_Climb", +["ACE3 Movement", QGVAR(climb), localize "STR_ACE_Movement_Climb", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index efed949036..af5ce71af4 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -35,6 +35,7 @@ Взобраться Mászás Arrampicati + Subir Can't climb here @@ -46,6 +47,7 @@ Здесь невозможно взобраться Itt nem tudsz mászni Non puoi arrampicarti qui + Não se pode subir aqui diff --git a/addons/nametags/XEH_postInit.sqf b/addons/nametags/XEH_postInit.sqf index 1df20e45e7..cea2025dcc 100644 --- a/addons/nametags/XEH_postInit.sqf +++ b/addons/nametags/XEH_postInit.sqf @@ -8,7 +8,7 @@ if (!hasInterface) exitWith {}; GVAR(ShowNamesTime) = -10; // Add keybinds -["ACE3", QGVAR(showNameTags), localize "STR_ACE_NameTags_ShowNames", +["ACE3 Common", QGVAR(showNameTags), localize "STR_ACE_NameTags_ShowNames", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 7c435cd6fd..8daae5cd5d 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -11,6 +11,7 @@ Nevek mutatása Показать имена Mostra i nomi + Mostrar nomes Show player names @@ -27,7 +28,7 @@ Show player name only on cursor (requires player names) Pokaż imiona graczy tylko pod kursorem (wymagana opcja Pokaż imiona graczy) - Mostrar nombres solo en el cursor (requiere Mostrar nombres de jugadores) + Mostrar nombres de jugadores solo al apuntarles (requiere Mostrar nombres de jugadores) Zeige Spielernamen nur an, wenn die Maus auf sie gerrichtet ist (benötigt Spielernamen) Noms uniquement sous le curseur (si noms affichés) Zobrazit jméno hráče jenom na kurzor (vyžaduje jména hráčů) @@ -39,13 +40,14 @@ Show player name only on keypress (requires player names) Spielernamen nur auf Tastendruck anzeigen (benötigt Spielernamen) - Mostrar nombres solo al pulsar (requiere Mostrar nombres de jugadores) + Mostrar nombres solo al pulsar la tecla(requiere Mostrar nombres de jugadores) Noms uniquement sur pression de la touche (si noms affichés) Zobrazit jména hráčů jen na klávesu (vyžaduje jména hráčů) Pokaż imiona graczy tylko po przytrzymaniu klawisza (wymagana opcja Pokaż imiona graczy) Játékosnevek mutatása csak gombnyomásra (a nevek mutatása szükséges) Показать имена игроков только по нажатию клавиши (при включенных именах) Mostra i nomi solo se si preme il tasto (richiede mostra nomi abilitato) + Mostrar nomes somente ao pressionar teclar (requer nome de jogadores) Show player ranks (requires player names) @@ -68,7 +70,8 @@ Zobrazit info o posádce vozidla Показывать информацию об экипаже Jármű-legénység adatainak mutatása - Mostra le informazioni sull'equipaggio del veicolo + Mostrar tripulantes + Mostra l'elenco del personale a bordo Show name tags for AI units @@ -79,7 +82,8 @@ Wyświetl imiona jednostek AI Afficher les noms des IA Névcímkék mutatása MI-egységeknél - Mostra le tag nomi per le unità AI + Mostra i nomi delle le unità AI + Mostrar nomes para unidades de IA Show SoundWaves (requires player names) @@ -90,7 +94,8 @@ Pokaż fale dźwiękowe (wymagana opcja Pokaż imiona graczy) Afficher "qui parle" (si noms affichés) "Hanghullámok" mutatása (a nevek mutatása szükséges) - Mostra barra movimento audio (richiede mostra nomi abilitato) + Mostra movimento audio (richiede mostra nomi abilitato) + Mostrar onda sonora (requer nome de jogadores) Default Nametag Color (Non Group Members) @@ -101,7 +106,8 @@ Couleur d'affichage par défaut (si dans aucun groupe) Standardní barva jmenovek (pro nečleny jednotky) Alap névcímke-szín (csoporton kívüli személyek) - Colore nametag di default (membri non del gruppo) + Colore dei nomi non appartenenti al gruppo + Cor padrão do nome (unidades fora do grupo) diff --git a/addons/nightvision/$PBOPREFIX$ b/addons/nightvision/$PBOPREFIX$ new file mode 100644 index 0000000000..4a3d560db5 --- /dev/null +++ b/addons/nightvision/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\nightvision \ No newline at end of file diff --git a/addons/nightvision/XEH_postInitClient.sqf b/addons/nightvision/XEH_postInitClient.sqf index db5d395096..3edc3edad5 100644 --- a/addons/nightvision/XEH_postInitClient.sqf +++ b/addons/nightvision/XEH_postInitClient.sqf @@ -37,7 +37,7 @@ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; ["playerTurretChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); // Add keybinds -["ACE3", QGVAR(IncreaseNVGBrightness), localize "STR_ACE_NightVision_IncreaseNVGBrightness", +["ACE3 Equipment", QGVAR(IncreaseNVGBrightness), localize "STR_ACE_NightVision_IncreaseNVGBrightness", { // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -51,7 +51,7 @@ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; {false}, [201, [false, false, true]], false] call cba_fnc_addKeybind; //PageUp + ALT -["ACE3", QGVAR(DecreaseNVGBrightness), localize "STR_ACE_NightVision_DecreaseNVGBrightness", +["ACE3 Equipment", QGVAR(DecreaseNVGBrightness), localize "STR_ACE_NightVision_DecreaseNVGBrightness", { // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/nightvision/stringtable.xml b/addons/nightvision/stringtable.xml index a2e24d79df..9fe8593e13 100644 --- a/addons/nightvision/stringtable.xml +++ b/addons/nightvision/stringtable.xml @@ -10,7 +10,7 @@ Gogle noktowizyjne (Gen1) Óculos de visão noturna (Gen1) ПНВ (Gen1) - Sistema de visión nocturna (Gen1) + Gafas de visión nocturna (Gen1) Éjjellátó szemüveg (1. Gen.) @@ -22,7 +22,7 @@ Gogle noktowizyjne (Gen2) Óculos de visão noturna (Gen2) ПНВ (Gen2) - Sistema de visión nocturna (Gen2) + Gafas de visión nocturna (Gen2) Éjjellátó szemüveg (2. Gen.) @@ -34,7 +34,7 @@ Gogle noktowizyjne (Gen3) Óculos de visão noturna (Gen3) ПНВ (Gen3) - Sistema de visión nocturna (Gen3) + Gafas de visión nocturna (Gen3) Éjjellátó szemüveg (3. Gen.) @@ -45,8 +45,8 @@ Occhiali notturni (Gen3, marroni) Gogle noktowizyjne (Gen3, brązowe) Óculos de visão noturna (Gen3, marrons) - ПНВ (Gen3, коричневый) - Sistema de visión nocturna (Gen3, marrón) + ПНВ (Gen3, Коричневый) + Gafas de visión nocturna (Gen3, marrón) Éjjellátó szemüveg (3. Gen., barna) @@ -57,8 +57,8 @@ Occhiali notturni (Gen3, verdi) Gogle noktowizyjne (Gen3, zielone) Óculos de visão noturna (Gen3, verdes) - ПНВ (Gen3, зеленый) - Sistema de visión nocturna (Gen3, verde) + ПНВ (Gen3, Зелёный) + Gafas de visión nocturna (Gen3, verde) Éjjellátó szemüveg (3. Gen., zöld) @@ -69,8 +69,8 @@ Occhiali notturni (Gen3, neri) Gogle noktowizyjne (Gen3, czarne) Óculos de visão noturna (Gen3, pretos) - ПНВ (Gen3, черный) - Sistema de visión nocturna (Gen3, negro) + ПНВ (Gen3, Чёрный) + Gafas de visión nocturna (Gen3, negro) Éjjellátó szemüveg (3. Gen., fekete) @@ -82,18 +82,20 @@ Gogle noktowizyjne (Gen4) Óculos de visão noturna (Gen4) ПНВ (Gen4) - Sistema de visión nocturna (Gen4) + Gafas de visión nocturna (Gen4) Éjjellátó szemüveg (4. Gen.) NV Goggles (Wide) NS-Brille (Weitwinkel) - Sistema de visión nocturna (Panorámicas) + Gafas de visión nocturna (Panorámicas) Gogle noktowizyjne (panoramiczne) Noktovizor (Širokoúhlý) ПНВ (Широкоугольный) JVN (Large) Éjjellátó szemüveg (széles látószögű) + Óculos de visão noturna (Panorâmico) + Occhiali notturni (Larghi) Brightness: %1 @@ -132,4 +134,4 @@ Riduci la luminosità dell'NVG - \ No newline at end of file + diff --git a/addons/optics/stringtable.xml b/addons/optics/stringtable.xml index 56216f2cb1..f9964c4310 100644 --- a/addons/optics/stringtable.xml +++ b/addons/optics/stringtable.xml @@ -57,7 +57,7 @@ MRCO (2D) MRCO (2D) MRCO (2D) - Прицел MRCO (2D) + MRCO (2D) MRCO (2D) MRCO (2D) @@ -69,7 +69,7 @@ MRCO (PIP) MRCO (PIP) MRCO (PIP) - Прицел MRCO (PIP) + MRCO (PIP) MRCO (PIP) MRCO (PIP) diff --git a/addons/optionsmenu/config.cpp b/addons/optionsmenu/config.cpp index 69249b36c4..36389568d3 100644 --- a/addons/optionsmenu/config.cpp +++ b/addons/optionsmenu/config.cpp @@ -37,3 +37,7 @@ class ACE_Settings { values[] = {"$str_medium", "$str_large", "$str_very_large"}; }; }; + +class ACE_Extensions { + extensions[] += {"ace_clipboard"}; +}; diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf index f98c3548e8..68dc7fbecd 100644 --- a/addons/optionsmenu/functions/fnc_exportSettings.sqf +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -55,13 +55,26 @@ class %1 { force = 1; };", _name, _value, format['"%1"', _typeName]]; - //clipboard seems to be getting cuttoff, so do a backup dump to rpt: - diag_log text _compiledConfigEntry; - _compiledConfig = _compiledConfig + _compiledConfigEntry; }; } forEach EGVAR(common,settings); -copyToClipboard format["%1",_compiledConfig]; +FUNC(clipboardExport) = { + private["_chunks"]; + _chunks = []; + + _chunks = [_this select 0, ";"] call CBA_fnc_split; + + { + private["_chunk"]; + _chunk = _x + ";"; + "ace_clipboard" callExtension format["%1", _chunk]; + } forEach _chunks; + + "ace_clipboard" callExtension "--COMPLETE--"; +}; +[_compiledConfig] call FUNC(clipboardExport); ["STR_ACE_OptionsMenu_settingsExported"] call EFUNC(common,displayTextStructured); + + diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index cdbdcf72a0..d5de0c1426 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -23,6 +23,7 @@ Corriger animation Animációk kijavítása Fixa l'animazione + Arrumar Animação Reset All @@ -34,6 +35,7 @@ Défaut Minden visszaállítása Resetta tutto + Resetar Tudo Colors @@ -45,6 +47,7 @@ Kolory Színek Colori + Cores Options @@ -68,6 +71,7 @@ Werte Értékek Valori + Valores Yes @@ -103,6 +107,7 @@ Paramètres Opció: Parametri: + Opção: Export @@ -114,27 +119,31 @@ Exporter Exportálás Esporta + Exportar Open Export Menu Öffne Exportmenü - Abrir menu d'exportación + Abrir menú de exportación Открыть меню экспорта Otevřít exportovací menu Otwórz menu eksportowania Ouvrir le menu d'exportation Exportálási menü megnyitása Apri menù esportazione + Abrir menu de exportação String input. Zeichenketteneingabe - Introducir frase + Introducir cadena de texto. Строчный ввод. Wpisywanie tekstu. + Vkládání textu. Entrée String bevitel. Stringa di unput. + Input de String Array. Seperate elements by using ,. @@ -146,17 +155,19 @@ Tabulka. Odděl elementy použitím ,. Array. Válasszad el az elemeket vesszővel. Array. Separa gli elementi usando ,. + Vetor. Separe elementos usando *,*. Number Zahl - Numero + Número Число Číslo Cyfra Nombre Szám Numero + Número Uknown input type @@ -168,6 +179,7 @@ Type d'entrée inconnue Ismeretlen beviteli típus Input inserito sconosciuto + Tipo desonhecido de input Save input @@ -179,6 +191,7 @@ Sauvegarder Bevitel elmentése Salva input + Salvar input Include Client Settings @@ -190,6 +203,7 @@ Inclure paramètres client Kliens-beállítások melléklése Includi i parametri del client + Incluir opções do cliente Exclude Client Settings @@ -201,6 +215,7 @@ Exclure paramètres client Kliens-beállítások elhagyása Escludi i parametri del client + Excluir opções do cliente Settings exported to clipboard @@ -212,12 +227,19 @@ Paramètres exportés dans le presse papier Beállítások exportálva a vágólapba Parametri esportati alla clipboard + Opções exportadas para o clipboard. Option Menu UI Scaling Menu option: taille de l'UI Skalowanie UI menu ustawień - Opción de escalado del menú UI + Měřítko UI v menu nastavení + Размер интерфейса меню настройки + Opción de escalado del menú IU + UI Skalierung + Beállításmenü kezelőfelületének skálázása + Escalar o menu de opções + Proporzioni della interfaccia utente diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index 2281a1eeac..5e7089ab75 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -4,7 +4,7 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", QGVAR(unjamWeapon), localize "STR_ACE_Overheating_UnjamWeapon", +["ACE3 Weapons", QGVAR(unjamWeapon), localize "STR_ACE_Overheating_UnjamWeapon", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/overheating/functions/fnc_overheat.sqf b/addons/overheating/functions/fnc_overheat.sqf index 05e5bbba9c..75ba1e1306 100644 --- a/addons/overheating/functions/fnc_overheat.sqf +++ b/addons/overheating/functions/fnc_overheat.sqf @@ -35,8 +35,7 @@ _temperature = _overheat select 0; _time = _overheat select 1; // Get physical parameters -// Bullet mass is read from config in grains and converted to grams -_bulletMass = (getNumber (configFile >> "CfgAmmo" >> _ammo >> "ACE_BulletMass")) * 0.06480; +_bulletMass = getNumber (configFile >> "CfgAmmo" >> _ammo >> "ACE_BulletMass"); if (_bulletMass == 0) then { // If the bullet mass is not configured, estimate it directly in grams _bulletMass = 3.4334 + 0.5171 * (getNumber (configFile >> "CfgAmmo" >> _ammo >> "hit") + getNumber (configFile >> "CfgAmmo" >> _ammo >> "caliber")); diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 557bd6c915..491b587fc2 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -4,12 +4,14 @@ Display text on jam Zeige Text bei Ladehemmung - Mostrar texto al encasquillar + Mostrar texto al encasquillarse Показывать текст, когда клинит оружие Zobrazit upozornění při zaseknutí Wyświetl tekst przy zacięciu broni Affiche texte si enrayé Szöveges értesítés kijelzése a fegyver elakadásakor + Mostrar texto quando trava acontecer + Visualizza testo in caso di inceppamento Display a notification whenever your weapon gets jammed @@ -20,6 +22,8 @@ Wyświetl powiadomienie za każdym razem, kiedy Twoja broń ulegnie zacięciu Affiche une notification lors d'un enrayement Egy szöveges értesítés jelenik meg, amikor a fegyver megakad + Mostra uma notificação quando sua arma sofre um travamento. + Visualizza una notifica in caso la tua arma si inceppasse Spare barrel @@ -94,15 +98,15 @@ Sostiuisci la canna - Swapping barrel... - Lauf wird gewechselt... - Cambiando el cañón... - Wymienianie lufy... + Swapping barrel ... + Lauf wird gewechselt ... + Cambiando el cañón ... + Wymienianie lufy ... Vyměňuji hlaveň ... - Changement du canon... + Changement du canon ... Смена ствола ... - Cső kicserélése folyamatban... - Substituindo cano... + Cső kicserélése folyamatban ... + Substituindo cano ... Sto sostituendo la canna ... @@ -112,13 +116,13 @@ Lufa wymieniona Hlaveň vyměněna Canon changé - Ствол сменен + Ствол заменён Cső kicserélve Cano substituído Canna sostituita - Check weapons temperature + Check weapon temperature Temperatur der Waffe prüfen Verificar temperatura del arma Sprawdź temperaturę broni @@ -130,14 +134,16 @@ Проверить температуру оружия - Waffentemperatur<br/>prüfen Check weapon temperature + Waffentemperatur prüfen Verificar temperatura del arma Sprawdź temperaturę broni Zkontrolovat teplotu zbraně Vérifier la température Fegyverhő ellenőrzése Проверить температуру оружия + Conferir temperatura + Controlla la temperatura della canna Checking temperature ... diff --git a/addons/parachute/XEH_postInit.sqf b/addons/parachute/XEH_postInit.sqf index 19e6d413a2..a6c589a39a 100644 --- a/addons/parachute/XEH_postInit.sqf +++ b/addons/parachute/XEH_postInit.sqf @@ -17,7 +17,7 @@ if (!hasInterface) exitWith {}; -["ACE3", QGVAR(showAltimeter), localize "STR_ACE_Parachute_showAltimeter", +["ACE3 Equipment", QGVAR(showAltimeter), localize "STR_ACE_Parachute_showAltimeter", { // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml index c0a63755b1..d3cdbd9a7d 100644 --- a/addons/parachute/stringtable.xml +++ b/addons/parachute/stringtable.xml @@ -11,6 +11,7 @@ Magasságmérő Высотомер Altimetro + Altímetro Altimeter Watch @@ -22,6 +23,7 @@ Magasságmérős karóra Часы с высотомером Controlla l'altimetro + Relógio Altímetro Used to show height, descent rate and the time. @@ -33,6 +35,7 @@ Mutatja a magasságot, a zuhanási sebességet, és az időt. Используется для определения высоты, скорости снижения и времени. Usato per mostrare l'altitudine, la velocità di discesa e l'ora. + Usado para mostrar altura, taxa de descida e o tempo. Non-Steerable Parachute @@ -44,6 +47,7 @@ Irányíthatatlan ejtőernyő Неуправляемый парашют Paracadute non manovrabile + Para-querdas não controlável diff --git a/addons/protection/FixVests.hpp b/addons/protection/FixVests.hpp index db00c1ea05..f3d1ad2b3d 100644 --- a/addons/protection/FixVests.hpp +++ b/addons/protection/FixVests.hpp @@ -234,7 +234,7 @@ class V_PlateCarrierIA2_dgtl: V_PlateCarrierIA1_dgtl { // heavy }; }; class V_PlateCarrierIAGL_dgtl: V_PlateCarrierIA2_dgtl { // heavy (gl) - class ItemInfo: ItemInfo { + class ItemInfo: VestItem { containerClass = "Supply140"; //"Supply120"; mass = 100; //80; armor = 12; //100; diff --git a/addons/realisticnames/CfgVehicles.hpp b/addons/realisticnames/CfgVehicles.hpp index 0fa3111243..cf1ce87b80 100644 --- a/addons/realisticnames/CfgVehicles.hpp +++ b/addons/realisticnames/CfgVehicles.hpp @@ -407,7 +407,7 @@ class CfgVehicles { displayName = "$STR_ACE_RealisticNames_launch_RPG32_Name"; }; - class Weapon_launch_Titan_F: Launcher_Base_F { + /*class Weapon_launch_Titan_F: Launcher_Base_F { displayName = "$STR_ACE_RealisticNames_launch_Titan_Name"; }; @@ -417,13 +417,13 @@ class CfgVehicles { class Weapon_launch_B_Titan_F: Launcher_Base_F { displayName = "$STR_ACE_RealisticNames_launch_Titan_Name"; - }; + };*/ //class Weapon_launch_I_Titan_F: Weapon_launch_B_Titan_F {}; //class Weapon_launch_O_Titan_F: Weapon_launch_B_Titan_F {}; - class Weapon_launch_launch_B_Titan_short_F: Launcher_Base_F { + /*class Weapon_launch_launch_B_Titan_short_F: Launcher_Base_F { displayName = "$STR_ACE_RealisticNames_launch_Titan_short_Name"; - }; + };*/ //class Weapon_launch_I_Titan_short_F: Weapon_launch_launch_B_Titan_short_F {}; //class Weapon_launch_O_Titan_short_F: Weapon_launch_launch_B_Titan_short_F {}; diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 8eb3c04577..e61457df5d 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -181,12 +181,12 @@ class CfgWeapons { displayName = "$STR_ACE_RealisticNames_launch_RPG32_Name"; }; - class launch_Titan_base: Launcher_Base_F { + /*class launch_Titan_base: Launcher_Base_F { displayName = "$STR_ACE_RealisticNames_launch_Titan_Name"; }; class launch_Titan_short_base: launch_Titan_base { displayName = "$STR_ACE_RealisticNames_launch_Titan_short_Name"; - }; + };*/ class launch_NLAW_F: Launcher_Base_F { displayName = "$STR_ACE_RealisticNames_launch_NLAW_Name"; diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 2966251ec6..54a6c1e869 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -30,7 +30,7 @@ XM312 (Hoch) XM312 (Alto) XM312 (Haut) - XM312 (vysoká montáž) + XM312 (Vysoká montáž) XM312 (Wysoki) XM312 (Высокий) XM312 (Alta) @@ -66,7 +66,7 @@ XM307 (Hoch) XM307 (Alto) XM307 (Haut) - XM307 (vysoká montáž) + XM307 (Vysoká montáž) XM307 (Wysoki) XM307 (Высокий) XM307 (Alta) @@ -118,6 +118,8 @@ YABHON-R3 (штурмовик) YABHON-R3 (CAS) YABHON-R3 (Légitámogató) + YABHON-R3 (CAS) + YABHON-R3 (CAS) M-ATV @@ -138,7 +140,7 @@ M-ATV (CKM) M-ATV (TK) M-ATV (HMG) - M-ATV (Пулемет) + M-ATV (Пулемёт) M-ATV (HMG) M-ATV (nehézgéppuska) M-ATV (HMG) @@ -150,7 +152,7 @@ M-ATV (GMG) M-ATV (Granátomet) M-ATV (GMG) - M-ATV (Гранатомет) + M-ATV (Гранатомёт) M-ATV (GMG) M-ATV (gránátgéppuska) M-ATV (GMG) @@ -290,7 +292,7 @@ HEMTT Container HEMTT Container - HEMTT de contenedor + HEMTT con contenedor HEMTT Kontener HEMTT Skříňový HEMTT Conteneur @@ -305,7 +307,7 @@ HEMTT médico HEMTT Medyczny HEMTT Zdravotnický - HEMTT Sanitaire + HEMTT Médical HEMTT Медицинский HEMTT Médico HEMTT (egészségügyi) @@ -366,7 +368,7 @@ Fennek (CKM) Fennek (TK) Fennek (HMG) - Феннек (Пулемет) + Феннек (Пулемёт) Fennek (HMG) Fennek (nehézgéppuska) Fennek (HMG) @@ -378,7 +380,7 @@ Fennek (GMG) Fennek (granátomet) Fennek (GMG) - Феннек (Гранатомет) + Феннек (Гранатомёт) Fennek (GMG) Fennek (gránátgéppuska) Fennek (GMG) @@ -438,7 +440,7 @@ KamAZ Transportowy (zakryty) KAMAZ Valník (krytý) KamAZ Transport (bâché) - КамАЗ Траспортный (Крытый) + КамАЗ Траспортный (крытый) KamAZ Transporte (coberto) KamAZ szállítójármű (ponyvás) KamAZ da trasporto (coperto) @@ -485,7 +487,7 @@ KamAZ médico KamAZ Medyczny KAMAZ Zdravotnický - KamAZ Sanitaire + KamAZ Médical КамАЗ Медицинский KamAZ Médico KamAZ (egészségügyi) @@ -510,7 +512,7 @@ Punisher (CKM) Punisher (TK) Punisher (HMG) - Kаратель (Пулемет) + Kаратель (Пулемёт) Punisher (HMG) Punisher (nehézgéppuska) Punisher (HMG) @@ -522,7 +524,7 @@ Punisher (GMG) Punisher (granátomet) Punisher (GMG) - Kаратель (Гранатомет) + Kаратель (Гранатомёт) Punisher (GMG) Punisher (gránátgéppuska) Punisher (GMG) @@ -534,7 +536,7 @@ T100 Black Eagle T100 Black Eagle T100 Black Eagle - T100 Черный Орел + T100 Чёрный Орел T100 Black Eagle T100 Fekete Sas T100 Black Eagle @@ -606,7 +608,7 @@ Typhoon Transportowy (przykryty) Typhoon valník (krytý) Typhoon Transport (bâché) - Тайфун Транспортный (kрытый) + Тайфун Транспортный (крытый) Typhoon Transporte (coberto) Typhoon szállítójármű (ponyvás) Typhoon da trasporto (coperto) @@ -614,7 +616,7 @@ Typhoon Device Typhoon Gerät - Typhoon de dispositivo + Typhoon con dispositivo Typhoon Urządzenie Typhoon zařízení Typhoon Dispositif @@ -665,7 +667,7 @@ Typhoon médico Typhoon Medyczny Typhoon zdravotnický - Typhoon Sanitaire + Typhoon Médical Тайфун Медицинский Typhoon Médico Typhoon (egészségügyi) @@ -726,8 +728,10 @@ CH-47I Chinook (nieuzbrojony) CH-47I Chinook (невооруженный) CH-47I Chinook (neozbrojený) - CH-47I Chinook (Neozbrojený) + CH-47I Chinook (non-armé) CH-47I Chinook (fegyvertelen) + CH-47I Chinook (disarmato) + CH-47I Chinook (desarmado) A-10D Thunderbolt II @@ -818,7 +822,7 @@ Ka-60 Kasatka (unbewaffnet) Ka-60 Kasatka (desarmado) Ka-60 Kasatka (nieuzbrojony) - Ka-60 Kasatka (neozbrojená) + Ka-60 Kasatka (neozbrojený) Ka-60 Kasatka (non-armé) Ka-60 Касатка (невооруженный) Ka-60 Kasatka (desarmado) @@ -867,7 +871,7 @@ M18A1 Claymore Mina kierunkowa M18A1 Claymore Mina Claymore M18A1 - M18A1 Claymore Mine antipersonnel à effet dirigé + M18A1 Claymore M18A1 Клеймор M18A1 Claymore M18A1 Claymore akna @@ -891,7 +895,7 @@ Bloque de demolición M112 Ładunek burzący M112 Výbušná nálož M112 - Pétard M112 + M112 Block de Démolition M112 подрывной заряд M112 Carga de Demolição M112 romboló tömb @@ -914,7 +918,7 @@ M83 Rauchgranate (Weiss) Granada de humo M83 (Blanco) Granat dymny M83 (Biały) - M83 Kouřový Granát (bílý) + M83 Kouřový Granát (Bílý) M83 Grenade fumigène (Blanche) M83 дымовая граната (Белый) M83 Granada de fumaça (Branca) @@ -926,7 +930,7 @@ M18 Rauchgranate (Blau) Granada de humo M18 (Azul) Granat dymny M18 (Niebieski) - M18 Kouřový Granát (modrý) + M18 Kouřový Granát (Modrý) M18 Grenade fumigène (Bleue) M18 дымовая граната (Синий) M18 Granada de fumaça (Azul) @@ -938,7 +942,7 @@ M18 Rauchgranate (Grün) Granada de humo M18 (Verde) Granat dymny M18 (Zielony) - M18 Kouřový Granát (zelený) + M18 Kouřový Granát (Zelený) M18 Grenade fumigène (Verte) M18 дымовая граната (Зелёный) M18 Granada de fumaça (Verde) @@ -950,7 +954,7 @@ M18 Rauchgranate (Orange) Granada de humo M18 (Naranja) Granat dymny M18 (Pomarańczowy) - M18 Kouřový Granát (oranžový) + M18 Kouřový Granát (Oranžový) M18 Grenade fumigène (Orange) M18 дымовая граната (Оранжевый) M18 Granada de fumaça (Laranja) @@ -962,7 +966,7 @@ M18 Rauchgranate (Violett) Granada de humo M18 (Púrpura) Granat dymny M18 (Fioletowy) - M18 Kouřový Granát (fialový) + M18 Kouřový Granát (Fialový) M18 Grenade fumigène (Pourpre) M18 дымовая граната (Пурпурный) M18 Granada de fumaça (Roxa) @@ -974,7 +978,7 @@ M18 Rauchgranate (Rot) Granada de humo M18 (Rojo) Granat dymny M18 (Czerwony) - M18 Kouřový Granát (červený) + M18 Kouřový Granát (Červený) M18 Grenade fumigène (Rouge) M18 дымовая граната (Красный) M18 Granada de fumaça (Vermelha) @@ -986,9 +990,9 @@ M18 Rauchgranate (Gelb) Granada de humo M18 (Amarillo) Granat dymny M18 (Żółty) - M18 Kouřový Granát (žlutý) + M18 Kouřový Granát (Žlutý) M18 Grenade fumigène (Jaune) - M183 дымовая граната (Жёлтые) + M183 дымовая граната (Жёлтый) M18 Granada de fumaça (Amarela) M18 füstgránát (Sárga) M18 Granata fumogena (Giallo) @@ -1011,7 +1015,7 @@ Mina antipersona VS-50 Mina przeciwpiechotna VS-50 Protipěchotní mina VS-50 - VS-50 Mine antipersonnel à pression + VS-50 Mine AP VS-50 Противопехотная мина VS-50 Mina antipessoal VS-50 gyalogsági taposóakna @@ -1023,7 +1027,7 @@ Mina antipersona M26 Mina przeciwpiechotna M26 Šrapnelová mina M26 - M26 Mine antipersonnel bondissante + M26 Mine AP bondissante M26 Противопехотная мина M26 Mina saltadora antipessoal M26 gyalogsági ugróakna @@ -1035,7 +1039,7 @@ Mina antipersona de alambre PMR-3 Mina przeciwpiechotna PMR-3 Nástražná mina PMR-3 - PMR-3 Mine antipersonnel à traction + PMR-3 Mine AP à traction PMR-3 Противопехотная мина PMR-3 Mina antipessoal (armadilha) PMR-3 botlódrótos gyalogsági akna @@ -1050,6 +1054,8 @@ P99 P99 P99 + P99 + P99 MP-443 Grach @@ -1060,6 +1066,8 @@ MP-443 Grach MP-443 Grach МР-443 "Грач" + MP-443 Grach + MP-443 Grach Custom Covert II @@ -1070,6 +1078,8 @@ Custom Covert II Custom Covert II Custom Covert II + Custom Covert II + ACP-C2 FNX-45 Tactical @@ -1080,6 +1090,8 @@ FNX-45 Tactical FNX-45 Tactical FNX-45 Tactical + FNX-45 Tactical + FNX-45 Tactical Chiappa Rhino 60DS @@ -1090,6 +1102,8 @@ Chiappa Rhino 6DS Chiappa Rhino 60DS Chiappa Rhino 60DS + Chiappa Rhino 60DS + Chiappa Rhino 6DS Taurus Judge @@ -1100,6 +1114,8 @@ Taurus Judge Taurus Judge Taurus Judge + Taurus Judge + Taurus Judge NLAW @@ -1110,6 +1126,8 @@ NLAW NLAW NLAW + NLAW + NLAW RPG-32 @@ -1120,26 +1138,32 @@ RPG-32 RPG-32 РПГ-32 + RPG-32 + RPG-32 Mini-Spike (AA) Mini-Spike (FlaRak) - Mini-Spike (PL) + Mini-Spike (AA) Mini-Spike (AA) Mini-Spike (AA) Mini-Spike (Repülő-elhárító) Mini-Spike (AA) Mini-Spike (AA) + Mini-Spike (AA) + Mini-Spike (AA) Mini-Spike (AT) Mini-Spike (PALR) - Mini-Spike (PT) + Mini-Spike (AT) Mini-Spike (AT) - Mini-Spike (AT) + Mini-Spike (AC) Mini-Spike (Tankelhárító) Mini-Spike (AT) Mini-Spike (AT) + Mini-Spike (AT) + Mini-Spike (AT) MX @@ -1150,16 +1174,20 @@ MX MX MX + MX + MX MX (Black) MX (Schwarz) MX (Czarny) - MX (černý) - MX ( Noir) + MX (Černý) + MX (Noir) MX (Fekete) MX (Negro) - MX (черный) + MX (Чёрный) + MX (Preto) + MX (Nero) MXC @@ -1170,16 +1198,20 @@ MXC MXC MXC + MXC + MXC MXC (Black) MXC (Schwarz) MXC (Czarny) - MXC (černý) + MXC (Černý) MXC (Noir) MXC (Fekete) MXC (Negro) - MXC (черный) + MXC (Чёрный) + MXC (Preto) + MXC (Nero) MX 3GL @@ -1190,16 +1222,20 @@ MX 3GL MX 3GL MX 3GL + MX 3GL + MX 3GL MX 3GL (Black) MX 3GL (Schwarz) MX 3GL (Czarny) - MX 3GL (černý) - MX 3 GL (Noir) + MX 3GL (Černý) + MX 3GL (Noir) MX 3GL (Fekete) MX 3GL (Negro) - MX 3GL (черный) + MX 3GL (Чёрный) + MX 3GL (Preto) + MX 3GL (Nero) MX LSW @@ -1210,16 +1246,20 @@ MX LSW MX LSW MX LSW + MX LSW + MX LSW MX LSW (Black) MX LSW (Schwarz) MX LSW (Czarny) - MX LSW (černý) + MX LSW (Černý) MX LSW (Noir) MX LSW (Fekete) MX LSW (Negro) - MX LSW (черный) + MX LSW (Чёрный) + MX LSW (Preto) + MX LSW (Nero) MXM @@ -1230,16 +1270,20 @@ MXM MXM MXM + MXM + MXM MXM (Black) MXM (Schwarz) MXM (Czarny) - MXM (černý) + MXM (Černý) MXM (Noir) MXM (Fekete) MXM (Negro) - MXM (черный) + MXM (Чёрный) + MXM (Preto) + MXM (Nero) KH2002 Sama @@ -1250,6 +1294,8 @@ KH2002 Sama KH2002 Sama KH2002 Сама + KT2002 Sama + KT2002 Katiba KH2002C Sama @@ -1260,6 +1306,8 @@ KH2002C Sama KH2002C Sama KH2002C Сама + KT2002C Sama + KT2002C Katiba KH2002 Sama KGL @@ -1270,16 +1318,20 @@ KH2002 Sama KGL KH2002 Sama KGL KH2002 Сама KGL + KT2002 Sama KGL + KT2002 Katiba KGL F2000 (Camo) F2000 (Tarnmuster) F2000 (kamuflaż) - F2000 (kamufláž + F2000 (Kamufláž) F2000 (Camo) F2000 (Terepmintás) F2000 (Camuflaje) - F2000 (камо) + F2000 (Камо) + F2000 (Camo) + F2000 (Camo) F2000 @@ -1290,16 +1342,20 @@ F2000 F2000 F2000 + F2000 + F2000 F2000 Tactical (Camo) F2000 Tactical (Tarnmuster) F2000 Tactical (kamuflaż) - F2000 Tactical (černý) + F2000 Tactical (Černý) F2000 Tactical (Camo) F2000 Tactical (Terepmintás) F2000 Tactical (Camuflaje) - F2000 Tactical (камо) + F2000 Tactical (Камо) + F2000 Tactical (Camo) + F2000 Tactical (Camo) F2000 Tactical @@ -1310,16 +1366,20 @@ F2000 Tactical F2000 Tactical F2000 Tactical + F2000 Tactical + F2000 Tactical F2000 EGLM (Camo) F2000 EGLM (Tarnmuster) F2000 EGLM (kamuflaż) - F2000 EGLM (kamufláž) + F2000 EGLM (Kamufláž) F2000 EGLM (Camo) F2000 EGLM (Terepmintás) F2000 EGLM (Camuflaje) - F2000 EGLM (камо) + F2000 EGLM (Камо) + F2000 EGLM (Camo) + F2000 EGLM (Camo) F2000 EGLM @@ -1330,6 +1390,8 @@ F2000 EGLM F2000 EGLM F2000 EGLM + F2000 EGLM + F2000 EGLM TAR-21 @@ -1340,6 +1402,8 @@ TAR-21 TAR-21 TAR-21 + TAR-21 + TAR-21 CTAR-21 @@ -1350,6 +1414,8 @@ CTAR-21 CTAR-21 CTAR-21 + CTAR-21 + CTAR-21 TAR-21 EGLM @@ -1360,6 +1426,8 @@ TAR-21 EGLM TAR-21 EGLM TAR-21 EGLM + TAR-21 EGLM + TAR-21 EGLM Vector SMG @@ -1370,6 +1438,8 @@ Vector SMG Vector SMG Vector SMG + Vector SMG + Vector SMG Scorpion Evo 3 A1 @@ -1380,6 +1450,8 @@ Scorpion Evo 3 A1 Scorpion Evo 3 A1 Scorpion Evo 3 A1 + Scorpion Evo 3 A1 + Scorpion Evo 3 A1 CPW @@ -1390,6 +1462,8 @@ CPW CPW CPW + CPW + CPW RFB SDAR @@ -1400,6 +1474,8 @@ RFB SDAR RFB SDAR RFB SDAR + RFB SDAR + RFB SDAR Stoner 99 LMG @@ -1410,6 +1486,8 @@ Stoner 99 Könnyűgéppuska Stoner 99 LMG Stoner 99 LMG + Stoner 99 LMG + Stoner 99 LMG Negev NG7 @@ -1420,6 +1498,8 @@ Negev NG7 Negev NG7 Negev NG7 + Negev NG7 + Negev NG7 Mk14 Mod 1 EBR @@ -1430,6 +1510,8 @@ Mk14 Mod 1 EBR Mk14 Mod 1 EBR Mk14 Mod 1 EBR + Mk14 Mod 1 EBR + Mk14 Mod 1 EBR GM6 Lynx @@ -1440,16 +1522,20 @@ GM6 Gepárd GM6 Lynx GM6 Lynx + GM6 Lynx + GM6 Lynx GM6 Lynx (Camo) GM6 Lynx (Tarnmuster) GM6 Lynx (kamuflaż) - GM6 Lynx (kamufláž) + GM6 Lynx (Kamufláž) GM6 Lynx (Camo) GM6 Gepárd (Terepmintás) GM6 Lynx (Camuflaje) - GM6 Lynx (камо) + GM6 Lynx (Камо) + GM6 Lynx (Camo) + GM6 Lynx (Camo) M200 Intervention @@ -1460,16 +1546,20 @@ M200 Intervention M200 Intervention M200 Intervention + M200 Intervention + M200 Intervention M200 Intervention (Camo) M200 Intervention (Tarnmuster) M200 Intervention (kamuflaż) - M200 Intervention (kamufláž) + M200 Intervention (Kamufláž) M200 Intervention (Camo) M200 Intervention (Terepmintás) M200 Intervention (Camuflaje) - M200 Intervention (камо) + M200 Intervention (Камо) + M200 Intervention (Camo) + M200 Intervention (Camo) VS-121 @@ -1480,6 +1570,8 @@ VS-121 VS-121 VS-121 + VS-121 + VS-121 Noreen "Bad News" ULR @@ -1487,27 +1579,47 @@ Noreen "Bad News" ULR Noreen "Bad News" ULR Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News"ULR + Noreen "Bad News" ULR Noreen "Bad News" ULR (Black) - Noreen "Bad News" ULR (Black) + Noreen "Bad News" ULR (Černý) Noreen "Bad News" ULR (Noir) Noreen "Bad News" ULR (Negro) - Noreen "Bad News" ULR (черный) + Noreen "Bad News" ULR (Чёрный) + Noreen "Bad News" ULR (Schwarz) + Noreen "Bad News" ULR (czarny) + Noreen "Bad News" ULR (Nero) + Noreen "Bad News"ULR (Fekete) + Noreen "Bad News" ULR (Preto) Noreen "Bad News" ULR (Camo) - Noreen "Bad News" ULR (Camo) + Noreen "Bad News" ULR (Kamufláž) Noreen "Bad News" ULR (Camo) Noreen "Bad News" ULR (Camuflaje) - Noreen "Bad News" ULR (камо) + Noreen "Bad News" ULR (Камо) + Noreen "Bad News" ULR (Camo) + Noreen "Bad News" ULR (kamuflaż) + Noreen "Bad News" ULR (Camo) + Noreen "Bad News"ULR (Terepmintás) + Noreen "Bad News" ULR (Camuflagem) Noreen "Bad News" ULR (Sand) - Noreen "Bad News" ULR (Sand) + Noreen "Bad News" ULR (Pouštní) Noreen "Bad News" ULR (Beige) Noreen "Bad News" ULR (Arena) - Noreen "Bad News" ULR (песочный) + Noreen "Bad News" ULR (Песочный) + Noreen "Bad News" ULR (Sand) + Noreen "Bad News" ULR (piaskowy) + Noreen "Bad News" ULR (Sabbia) + Noreen "Bad News"ULR (Homok) + Noreen "Bad News" ULR (Deserto) SIG 556 @@ -1516,54 +1628,82 @@ SIG 556 SIG 556 SIG 556 + SIG 556 + SIG 556 + SIG 556 + SIG 556 SIG 556 (Black) - SIG 556 (Black) + SIG 556 (Černý) SIG 556 (Noir) SIG 556 (Negro) - SIG 556 (черный) + SIG 556 (Чёрный) SIG 556 (czarny) + SIG 556 (Schwarz) + SIG 556 (Nero) + SIG 556 (Fekete) + SIG 556 (Preto) SIG 556 (Khaki) SIG 556 (Khaki) SIG 556 (Kaki) SIG 556 (Caqui) - SIG 556 (хаки) + SIG 556 (Хаки) SIG 556 (khaki) + SIG 556 (Khaki) + SIG 556 (Khaki) + SIG 556 (Khaki) + SIG 556 (Caqui) SIG 556 (Sand) - SIG 556 (Sand) + SIG 556 (Pouštní) SIG 556 (Beige) SIG 556 (Arena) - SIG 556 (песочный) + SIG 556 (Песочный) SIG 556 (piaskowy) + SIG 556 (Sand) + SIG 556 (Sabbia) + SIG 556 (Homok) + SIG 556 (Deserto) SIG 556 (Camo) - SIG 556 (Camo) + SIG 556 (Kamufláž) SIG 556 (Camo) SIG 556 (Camuflaje) - SIG 556 (камо) + SIG 556 (Камо) SIG 556 (kamuflaż) + SIG 556 (Camo) + SIG 556 (Camo) + SIG 556 (Terepmintás) + SIG 556 (Camuflagem) SIG 556 (Woodland) SIG 556 (Woodland) SIG 556 (Woodland) SIG 556 (Bosque) - SIG 556 (лесной) + SIG 556 (Лесной) SIG 556 (leśny) + SIG 556 (Woodland) + SIG 556 (Woodland) + SIG 556 (Erdőmintás) + SIG 556 (Floresta) SIG 556 (provisional) spotter - SIG 556 (provisional) spotter + SIG 556 (Provizorní) spotter SIG 556 (provisoire) Observateur SIG 556 (provisional) observador SIG 556 (provisional) корректировщик SIG 556 (prowizoryczny) obserwator + SIG 556 (provisorisch) Beobachter + SIG 556 (provisional) spotter + SIG 556 (Ellátmányi) Megfigyelő + SIG 556 (provisional) observador ASP-1 Kir @@ -1571,20 +1711,35 @@ ASP-1 Kir ASP-1 Kir ASP-1 Kir + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir ASP-1 Kir (Black) - ASP-1 Kir (Black) + ASP-1 Kir (Čený) ASP-1 Kir (Noir) ASP-1 Kir (Negro) - ASP-1 Kir (черный) + ASP-1 Kir (Чёрный) + ASP-1 Kir (Schwarz) + ASP-1 Kir (czarny) + ASP-1 Kir (Nero) + ASP-1 Kir (Fekete) + ASP-1 Kir (Preto) ASP-1 Kir (Tan) - ASP-1 Kir (Tan) + ASP-1 Kir (Pouštní) ASP-1 Kir (Tan) ASP-1 Kir (Tan) - ASP-1 Kir (бронзовый) + ASP-1 Kir (Бронзовый) + ASP-1 Kir (Hellbraun) + ASP-1 Kir (Tan) + ASP-1 Kir (Tan) + ASP-1 Kir (Cserszín) + ASP-1 Kir (Deserto) Cyrus @@ -1592,27 +1747,47 @@ Cyrus Cyrus Cyrus + Cyrus + Cyrus + Cyrus + Cyrus + Cyrus Cyrus (Black) - Cyrus (Black) + Cyrus (Černý) Cyrus (Noir) Cyrus (Negro) - Cyrus (черный) + Cyrus (Чёрный) + Cyrus (Schwarz) + Cyrus (czarny) + Cyrus (Nero) + Cyrus (Fekete) + Cyrus (Preto) Cyrus (Hex) Cyrus (Hex) Cyrus (Hex) Cyrus (Hex) - Cyrus (гекс) + Cyrus (Гекс) + Cyrus (Hex) + Cyrus (hex) + Cyrus (Hex) + Cyrus (Hex) + Cyrus (Hex) Cyrus (Tan) - Cyrus (Tan) + Cyrus (Pouštní) Cyrus (Tan) Cyrus (Tan) - Cyrus (бронза) + Cyrus (Бронза) + Cyrus (Hellbraun) + Cyrus (podpalany) + Cyrus (Tan) + Cyrus (Cserszín) + Cyrus (Deserto) M14 @@ -1621,22 +1796,34 @@ M14 M14 M14 + M14 + M14 + M14 + M14 M14 (Camo) - M14 (Camo) + M14 (Kamufláž) M14 (Camo) M14 (Camuflaje) M14 (Камо) M14 (kamuflaż) + M14 (Camo) + M14 (Camo) + M14 (Terepmintás) + M14 (Camuflagem) M14 (Olive) - M14 (Olive) + M14 (Olivový) M14 (Olive) M14 (Oliva) M14 (Олива) M14 (oliwkowy) + M14 (Olive) + M14 (Olive) + M14 (Olíva) + M14 (Oliva) HK121 @@ -1644,20 +1831,35 @@ HK121 HK121 HK121 + HK121 + HK121 + HK121 + HK121 + HK121 HK121 (Hex) HK121 (Hex) HK121 (Hex) HK121 (Hex) - HK121 (гекс) + HK121 (Гекс) + HK121 (Hex) + HK121 (hex) + HK121 (Hex) + HK121 (Hex) + HK121 (Hex) HK121 (Tan) - HK121 (Tan) + HK121 (Pouštní) HK121 (Tan) HK121 (Tan) - HK121 (бронза) + HK121 (Бронза) + HK121 (Hellbraun) + HK121 (podpalany) + HK121 (Tan) + HK121 (Cserszín) + HK121 (Deserto) LWMMG @@ -1666,6 +1868,10 @@ LWMMG LWMMG LWMMG + LWMMG + LWMMG + LWMMG + LWMMG LWMMG (MTP) @@ -1674,22 +1880,34 @@ LWMMG (MTP) LWMMG (MTP) LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) LWMMG (Black) - LWMMG (Black) + LWMMG (Černý) LWMMG (Noir) LWMMG (Negro) - LWMMG (Черный) + LWMMG (Чёрный) LWMMG (czarny) + LWMMG (Schwarz) + LWMMG (Nero) + LWMMG (Fekete) + LWMMG (Preto) LWMMG (Sand) - LWMMG (Sand) + LWMMG (Pouštní) SPMG (Beige) LWMMG (Arena) LWMMG (Песочный) LWMMG (piaskowy) + LWMMG (Sand) + LWMMG (Sabbia) + LWMMG (Homok) + LWMMG (Deserto) - + \ No newline at end of file diff --git a/addons/recoil/functions/fnc_camshake.sqf b/addons/recoil/functions/fnc_camshake.sqf index 737582b1cb..806d48760b 100644 --- a/addons/recoil/functions/fnc_camshake.sqf +++ b/addons/recoil/functions/fnc_camshake.sqf @@ -33,8 +33,12 @@ _recoil = if (_muzzle == _weapon) then { getText (_config >> _muzzle >> "recoil") }; -_recoil = getArray (configFile >> "CfgRecoils" >> _recoil >> "kickBack"); -if (count _recoil < 2) then { +if (isClass (configFile >> "CfgRecoils" >> _recoil)) then { + _recoil = getArray (configFile >> "CfgRecoils" >> _recoil >> "kickBack"); + if (count _recoil < 2) then { + _recoil = [0, 0]; + }; +} else { _recoil = [0, 0]; }; diff --git a/addons/reload/XEH_postInit.sqf b/addons/reload/XEH_postInit.sqf index 422ea183d3..149317c136 100644 --- a/addons/reload/XEH_postInit.sqf +++ b/addons/reload/XEH_postInit.sqf @@ -4,7 +4,7 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", QGVAR(checkAmmo), localize "STR_ACE_Reload_checkAmmo", +["ACE3 Weapons", QGVAR(checkAmmo), localize "STR_ACE_Reload_checkAmmo", { // Conditions: canInteract if !([ACE_player, (vehicle ACE_player), ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index ceaf32c2d8..9e3cf6c1b0 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -4,29 +4,31 @@ Check ammo on weapon reload Prüfe Munition beim Nachladen - Comprovar munición al recargar el arma + Comprobar munición al recargar el arma Проверять боезапас при перезарядке Zkontrolovat munici při nabití Sprawdź stan amunicji przy przeładowaniu broni Vérification des munitions au rechargement Lőszer ellenőrzése a fegyver újratöltésekor Controlla le munizioni ricaricando + Conferir munição ao recarregar a arma Check the ammo in your new magazine on magazine reload. Prüfe nachgeladenes Magazin - Comprueva la munición del nuevo cargador al recargar. + Comprueba la munición del nuevo cargador al recargar. Проверяет количество патронов в новом магазине при перезарядке. Kontroluje munice při nabití nového zásobníku. Pokaż stan amunicji w nowym magazynku przy przeładowaniu broni Vérification du nombre de munition au rechargement A lőszer ellenőrzése az új tárad behelyezésekor újratöltés közben. Controlla le munizioni rimanenti nel caricatore in fase di cambio caricatore. + Confere a munição no seu novo carregador ao recarregar a arma Check Ammo Munition prüfen - Verificar munición + Comprobar munición Sprawdź amunicję Vérifier Munitions Lőszerellenőrzés @@ -57,10 +59,11 @@ Gurt anhängen Töltényheveder összekötése Attacca la tracolla + Ligar cintos de munição Linking belt... - Attache d'une bande + Attache d'une bande... Enlazando cinta... Сцепка лент ... Spojuji pás... @@ -68,6 +71,7 @@ Gurt anhängen ... Töltényheveder összekötése folyamatban... Attacco la tracolla... + Ligando cintos... diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index bb949040d0..d82970a3d5 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -11,10 +11,11 @@ Charger lanceur Kilövö betöltése Carica lanciamissili + Recarregar lançador Loading launcher ... - Chargement du lanceur + Chargement du lanceur ... Panzerabwehr wird geladen ... Cargando lanzador ... Зарядка ПУ ... @@ -22,17 +23,19 @@ Ładowanie wyrzutni ... Kilövő betöltés alatt ... Carico il lanciamissili ... + Recarregando lançador... Launcher loaded Lanceur chargé Panzerabwehr geladen Lanzador cargado - ПУ заряжено + ПУ заряжена Odpalovač nabit Wyrzutnia załadowana Kilövő betöltve Lanciamissili caricato + Lançador Carregado Load %1 @@ -44,6 +47,7 @@ Załadowano %1 %1 betöltése Caricato %1 + Recarregar %1 diff --git a/addons/respawn/$PBOPREFIX$ b/addons/respawn/$PBOPREFIX$ new file mode 100644 index 0000000000..072ffe81e3 --- /dev/null +++ b/addons/respawn/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\respawn \ No newline at end of file diff --git a/addons/respawn/CfgVehicles.hpp b/addons/respawn/CfgVehicles.hpp index 384376b00c..2f963a12d3 100644 --- a/addons/respawn/CfgVehicles.hpp +++ b/addons/respawn/CfgVehicles.hpp @@ -14,22 +14,14 @@ class CfgVehicles { displayName = "Save Gear?"; description = "Respawn with the gear a soldier had just before his death?"; typeName = "BOOL"; - - class values { - class Yes { name = "Yes"; value = 1; }; - class No { default = 1; name = "No"; value = 0; }; - }; + defaultValue = 0; }; class RemoveDeadBodiesDisconnected { displayName = "Remove bodies?"; description = "Remove player bodies after disconnect?"; typeName = "BOOL"; - - class values { - class Yes { default = 1; name = "Yes"; value = 1; }; - class No { name = "No"; value = 0; }; - }; + defaultValue = 1; }; }; }; @@ -96,11 +88,11 @@ class CfgVehicles { class ACE_Actions: ACE_Actions { class ACE_Teleport { - displayName = "$STR_ACE_Respawn_TeleportedToRallypoint"; + displayName = "$STR_ACE_Respawn_TeleportToRallypoint"; distance = 4; condition = QUOTE(side group _player == west); statement = QUOTE([ARR_3(_player,side group _player,'ACE_Rallypoint_West')] call FUNC(teleportToRallypoint)); - position = "[0,0,-1]"; + position = "[-0.05,-0.35,-2.6]"; showDisabled = 1; priority = 1; }; @@ -116,11 +108,11 @@ class CfgVehicles { class ACE_Actions: ACE_Actions { class ACE_Teleport { - displayName = "$STR_ACE_Respawn_TeleportedToRallypoint"; + displayName = "$STR_ACE_Respawn_TeleportToRallypoint"; distance = 4; condition = QUOTE(side group _player == east); statement = QUOTE([ARR_3(_player,side group _player,'ACE_Rallypoint_East')] call FUNC(teleportToRallypoint)); - position = "[0,0,-1]"; + position = "[-0.05,-0.35,-2.6]"; showDisabled = 1; priority = 1; }; @@ -136,11 +128,11 @@ class CfgVehicles { class ACE_Actions: ACE_Actions { class ACE_Teleport { - displayName = "$STR_ACE_Respawn_TeleportedToRallypoint"; + displayName = "$STR_ACE_Respawn_TeleportToRallypoint"; distance = 4; condition = QUOTE(side group _player == independent); statement = QUOTE([ARR_3(_player,side group _player,'ACE_Rallypoint_Independent')] call FUNC(teleportToRallypoint)); - position = "[0,0,-1]"; + position = "[-0.05,-0.35,-2.6]"; showDisabled = 1; priority = 1; }; @@ -157,11 +149,11 @@ class CfgVehicles { class ACE_Actions: ACE_Actions { class ACE_Teleport { - displayName = "$STR_ACE_Respawn_TeleportedToBase"; + displayName = "$STR_ACE_Respawn_TeleportToBase"; distance = 4; condition = QUOTE(side group _player == west); statement = QUOTE([ARR_3(_player,side group _player,'ACE_Rallypoint_West_Base')] call FUNC(teleportToRallypoint)); - position = "[0,0,-1]"; + position = "[-0.05,-0.35,-2.6]"; showDisabled = 1; priority = 1; }; @@ -177,11 +169,11 @@ class CfgVehicles { class ACE_Actions: ACE_Actions { class ACE_Teleport { - displayName = "$STR_ACE_Respawn_TeleportedToBase"; + displayName = "$STR_ACE_Respawn_TeleportToBase"; distance = 4; condition = QUOTE(side group _player == east); statement = QUOTE([ARR_3(_player,side group _player,'ACE_Rallypoint_East_Base')] call FUNC(teleportToRallypoint)); - position = "[0,0,-1]"; + position = "[-0.05,-0.35,-2.6]"; showDisabled = 1; priority = 1; }; @@ -197,11 +189,11 @@ class CfgVehicles { class ACE_Actions: ACE_Actions { class ACE_Teleport { - displayName = "$STR_ACE_Respawn_TeleportedToBase"; + displayName = "$STR_ACE_Respawn_TeleportToBase"; distance = 4; condition = QUOTE(side group _player == independent); statement = QUOTE([ARR_3(_player,side group _player,'ACE_Rallypoint_Independent_Base')] call FUNC(teleportToRallypoint)); - position = "[0,0,-1]"; + position = "[-0.05,-0.35,-2.6]"; showDisabled = 1; priority = 1; }; diff --git a/addons/respawn/config.cpp b/addons/respawn/config.cpp index 19032df4f7..05f4ee2aa8 100644 --- a/addons/respawn/config.cpp +++ b/addons/respawn/config.cpp @@ -26,4 +26,8 @@ class ACE_Settings { value = 1; typeName = "BOOL"; }; + class GVAR(BodyRemoveTimer) { + value = 0; + typeName = "SCALAR"; + }; }; diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 75f711e20e..539bb4b530 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -11,39 +11,67 @@ Respawn za 5 sekund... Kihelyezés 5 másodperc múlva ... Dispiegamento in 5 secondi ... + Será posicionado em 5 segundos ... Rallypoint deployed Point de ralliement déployé - Rallypoint errichtet + Sammelpunkt errichtet Punto de reunión desplegado Точка сбора установлена Punkt zbiórki rozmieszczony Rallypoint umístěn Gyülekezőpont elhelyezve Rallypoint dispiegato + Rallypoints posicionado + + + Teleport to Base + Teleportovat na Základnu + Zur Basis teleportieren + Treletransportar a Base + Teleport do bazy + Телепортироваться на базу + Téléportation à la base + Teletransportar para a Base + Bázisra teleportálás + Teleporta alla base + + + Teleport to Rallypoint + Teleport na Rallypoint + Teletransportar a Punto de reunión + Zum Sammelpunkt teleportieren + Teleport do punktu zbiórki + Телепортироваться на точку сбора + Téléporation au point de ralliement + Teletransportar para o ponto de encontro + Gyülekezőpontra teleportálás + Teleporta al rallypoint Teleported to Base Téléporté à la base Zur Basis teleportiert Teletransportado a base - Телепорт на базу + Вы были телепортированы на базу Przeteleportowano do bazy - Odteleportován na základnu + Teleportován na základnu Bázisra teleportálva Teleportato alla base + Teletransportado para a Base Teleported to Rallypoint Téléporté au point de déploiement - Zum Rallypoint teleportiert + Zum Sammelpunkt teleportiert Teletransportado al punto de reunión - Телепорт на точку сбора + Вы были телепортированы на точку сбора Przeteleportowano do punktu zbiórki - Odteleportován na rallypoint + Teleportován na rallypoint Gyülekezőpontra teleportálva Teleportato al rallypoint + Teletransportado para o Rallypoints Rallypoint West (Base) @@ -52,6 +80,10 @@ Точка сбора Синих (База) Punkt zbiórki Zachodu (Baza) Point de ralliement OUEST (Base) + Rallypoint West (Base) + Gyülekezőpont, Nyugat (Bázis) + Rallypoint Západ (Základna) + Ponto de encontro Oeste (Base) Rallypoint East (Base) @@ -60,6 +92,10 @@ Точка сбора Красных (База) Punkt zbiórki Wschodu (Baza) Point de ralliement EST (Base) + Rallypoint East (Base) + Gyülekezőpont, Kelet (Bázis) + Ralllypoint Východ (Základna) + Ponto de encontro Lest (Base) Rallypoint Independent (Base) @@ -68,6 +104,10 @@ Точка сбора Независимых (База) Punkt zbiórki Ruchu oporu (Baza) Point de ralliement Indépendant (Base) + Rallypoint Independent (Base) + Gyülekezőpont, Független (Bázis) + Rallypoint Nezávislý (Základna) + Ponto de encontro Independente (Base) Rallypoint West @@ -76,6 +116,10 @@ Точка сбора Синих Punkt zbiórki Zachodu Point de ralliement OUEST + Rallypoint West + Gyülekezőpont, Nyugat + Rallypoint Západ + Ponto de encontro Oeste Rallypoint East @@ -84,6 +128,10 @@ Точка сбора Красных Punkt zbiórki Wschodu Point de ralliement EST + Rallypoint East + Gyülekezőpont, Kelet + Rallypoint Východ + Ponto de encontro Leste Rallypoint Independent @@ -92,6 +140,10 @@ Точка сбора Независимых Punkt zbiórki Ruchu oporu Point de ralliement Indépendant + Rallypoint Independent + Gyülekezőpont, Független + Rallypoint Nezávislý + Ponto de encontro Independente diff --git a/addons/safemode/XEH_postInit.sqf b/addons/safemode/XEH_postInit.sqf index be6b79d82a..9c3d989425 100644 --- a/addons/safemode/XEH_postInit.sqf +++ b/addons/safemode/XEH_postInit.sqf @@ -9,7 +9,7 @@ if (!hasInterface) exitWith {}; // Add keybinds -["ACE3", QGVAR(safeMode), localize "STR_ACE_SafeMode_SafeMode", +["ACE3 Weapons", QGVAR(safeMode), localize "STR_ACE_SafeMode_SafeMode", { // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/safemode/stringtable.xml b/addons/safemode/stringtable.xml index 521651999a..e824f2340c 100644 --- a/addons/safemode/stringtable.xml +++ b/addons/safemode/stringtable.xml @@ -11,6 +11,7 @@ Предохранитель Sécurité Sicura inserita + Modo de segurança Take off Safety @@ -22,6 +23,7 @@ Снять с предохранителя Enlever sécurité Togli la sicura + Tirar segurança Put on Safety @@ -32,7 +34,8 @@ Biztonsági kapcsoló helyretolása Поставить на предохранитель Sécurité mise - Inserisci la sicura + Sicura inserita + Colocar Segurança Took off Safety @@ -43,7 +46,8 @@ Biztonságos mód megszüntetve Снят с предохранителя Sécurité enlevée - Togli la sicura + Sicura tolta + Tirou Segurança diff --git a/addons/scopes/CfgEventHandlers.hpp b/addons/scopes/CfgEventHandlers.hpp index b3d70a2861..5c23e0c462 100644 --- a/addons/scopes/CfgEventHandlers.hpp +++ b/addons/scopes/CfgEventHandlers.hpp @@ -10,10 +10,10 @@ class Extended_PostInit_EventHandlers { }; }; -class Extended_Fired_EventHandlers { +class Extended_FiredBIS_EventHandlers { class CAManBase { class ADDON { - fired = QUOTE(_this call FUNC(firedEH);); + firedBIS = QUOTE(_this call FUNC(firedEH);); }; }; }; diff --git a/addons/scopes/XEH_postInit.sqf b/addons/scopes/XEH_postInit.sqf index ca4017222a..d7affc0534 100644 --- a/addons/scopes/XEH_postInit.sqf +++ b/addons/scopes/XEH_postInit.sqf @@ -33,20 +33,20 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", QGVAR(AdjustUpMinor), localize "STR_ACE_Scopes_AdjustUpMinor", +["ACE3 Scope Adjustment", QGVAR(AdjustUpMinor), localize "STR_ACE_Scopes_AdjustUpMinor", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific [ACE_player] call FUNC(inventoryCheck); - + // Statement [ACE_player, ELEVATION_UP, MINOR_INCREMENT] call FUNC(adjustScope); }, {false}, [201, [false, false, false]], true] call cba_fnc_addKeybind; -["ACE3", QGVAR(AdjustDownMinor), localize "STR_ACE_Scopes_AdjustDownMinor", +["ACE3 Scope Adjustment", QGVAR(AdjustDownMinor), localize "STR_ACE_Scopes_AdjustDownMinor", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -59,7 +59,7 @@ if !(hasInterface) exitWith {}; {false}, [209, [false, false, false]], true] call cba_fnc_addKeybind; -["ACE3", QGVAR(AdjustLeftMinor), localize "STR_ACE_Scopes_AdjustLeftMinor", +["ACE3 Scope Adjustment", QGVAR(AdjustLeftMinor), localize "STR_ACE_Scopes_AdjustLeftMinor", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -72,7 +72,7 @@ if !(hasInterface) exitWith {}; {false}, [209, [false, true, false]], true] call cba_fnc_addKeybind; -["ACE3", QGVAR(AdjustRightMinor), localize "STR_ACE_Scopes_AdjustRightMinor", +["ACE3 Scope Adjustment", QGVAR(AdjustRightMinor), localize "STR_ACE_Scopes_AdjustRightMinor", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -85,7 +85,7 @@ if !(hasInterface) exitWith {}; {false}, [201, [false, true, false]], true] call cba_fnc_addKeybind; -["ACE3", QGVAR(AdjustUpMajor), localize "STR_ACE_Scopes_AdjustUpMajor", +["ACE3 Scope Adjustment", QGVAR(AdjustUpMajor), localize "STR_ACE_Scopes_AdjustUpMajor", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -98,7 +98,7 @@ if !(hasInterface) exitWith {}; {false}, [201, [true, false, false]], true] call cba_fnc_addKeybind; -["ACE3", QGVAR(AdjustDownMajor), localize "STR_ACE_Scopes_AdjustDownMajor", +["ACE3 Scope Adjustment", QGVAR(AdjustDownMajor), localize "STR_ACE_Scopes_AdjustDownMajor", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -111,7 +111,7 @@ if !(hasInterface) exitWith {}; {false}, [209, [true, false, false]], true] call cba_fnc_addKeybind; -["ACE3", QGVAR(AdjustLeftMajor), localize "STR_ACE_Scopes_AdjustLeftMajor", +["ACE3 Scope Adjustment", QGVAR(AdjustLeftMajor), localize "STR_ACE_Scopes_AdjustLeftMajor", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -124,7 +124,7 @@ if !(hasInterface) exitWith {}; {false}, [209, [true, true, false]], true] call cba_fnc_addKeybind; -["ACE3", QGVAR(AdjustRightMajor), localize "STR_ACE_Scopes_AdjustRightMajor", +["ACE3 Scope Adjustment", QGVAR(AdjustRightMajor), localize "STR_ACE_Scopes_AdjustRightMajor", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/scopes/functions/fnc_adjustScope.sqf b/addons/scopes/functions/fnc_adjustScope.sqf index d13ff57ffc..31b85f309e 100644 --- a/addons/scopes/functions/fnc_adjustScope.sqf +++ b/addons/scopes/functions/fnc_adjustScope.sqf @@ -17,6 +17,7 @@ PARAMS_3(_unit,_turretAndDirection,_majorStep); if (!(_unit isKindOf "Man")) exitWith {false}; +if (currentMuzzle _unit != currentWeapon _unit) exitWith {false}; private ["_weaponIndex", "_zeroing", "_optic", "_increment", "_maxVertical", "_maxHorizontal", "_elevation", "_windage", "_zero", "_adjustment"]; @@ -37,7 +38,7 @@ _increment = getNumber (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust _maxVertical = getArray (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Vertical"); _maxHorizontal = getArray (configFile >> "CfgWeapons" >> _optic >> "ACE_ScopeAdjust_Horizontal"); -if ((count _maxHorizontal < 2) or (count _maxVertical < 2)) exitWith {false}; +if ((_increment == 0) or (count _maxHorizontal < 2) or (count _maxVertical < 2)) exitWith {false}; _zeroing = _adjustment select _weaponIndex; _elevation = _zeroing select 0; diff --git a/addons/scopes/functions/fnc_firedEH.sqf b/addons/scopes/functions/fnc_firedEH.sqf index 8753019931..020431c27b 100644 --- a/addons/scopes/functions/fnc_firedEH.sqf +++ b/addons/scopes/functions/fnc_firedEH.sqf @@ -3,12 +3,13 @@ * Adjusts the flight path of the bullet according to the zeroing * * Argument: - * 0: Unit - * 1: Weapon - * 3: Muzzle - * 4: Magazine - * 5: Ammo - * 6: Projectile + * 0: unit - Object the event handler is assigned to + * 1: weapon - Fired weapon + * 2: muzzle - Muzzle that was used + * 3: mode - Current mode of the fired weapon + * 4: ammo - Ammo used + * 5: magazine - magazine name which was used + * 6: projectile - Object of the projectile that was shot * * Return value: * None @@ -17,26 +18,23 @@ */ #include "script_component.hpp" -private ["_unit", "_adjustment", "_weapon", "_projectile", "_weaponIndex", "_zeroing", "_adjustment"]; - +private ["_unit", "_adjustment", "_projectile", "_weaponIndex", "_zeroing", "_adjustment"]; _unit = _this select 0; +_projectile = _this select 6; -// Exit if the unit doesn't have any adjusment variable -_adjustment = _unit getVariable QGVAR(Adjustment); -if (isNil "_adjustment") exitWith {}; - -// Exit if the unit isn't a player if !([_unit] call EFUNC(common,isPlayer)) exitWith {}; -_weapon = _this select 1; -_projectile = _this select 5; +_adjustment = _unit getVariable [QGVAR(Adjustment), []]; +if (_adjustment isEqualTo []) exitWith {}; _weaponIndex = [_unit, currentWeapon _unit] call EFUNC(common,getWeaponIndex); if (_weaponIndex < 0) exitWith {}; _zeroing = _adjustment select _weaponIndex; +if (_zeroing isEqualTo [0,0,0]) exitWith {}; + // Convert zeroing from mils to degrees -_zeroing = [_zeroing, {_this * 0.05625}] call EFUNC(common,map); +_zeroing = _zeroing vectorMultiply 0.05625; [_projectile, (_zeroing select 1), (_zeroing select 0) + (_zeroing select 2), 0] call EFUNC(common,changeProjectileDirection); diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index d84f0932af..226df258bd 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -9,6 +9,9 @@ Regola leggermente alzata in alto Hausse + Kleine Korrektur nach oben + Enyhe állítás fel + Pequeno ajuste para cima + Korekce mírně nahoru Minor adjustment down @@ -18,6 +21,9 @@ Regola leggermente alzata in basso Hausse - Kleine Korrektur nach unten + Enyhe állítás le + Pequeno ajuste para baixo + Korekce mírně dolů Minor adjustment right @@ -27,6 +33,9 @@ Regola leggermente il tiro a destra Dérive + Kleine Korrektur nach rechts + Enyhe állítás jobbra + Pequeno ajuste para direita + Korekce mírně doprava Minor adjustment left @@ -36,6 +45,9 @@ Regola leggermete il tiro a sinistra Dérive - Kleine Korrektur nach links + Enyhe állítás balra + Pequeno ajuste para esquerda + Korekce mírně doleva Major adjustment up @@ -45,6 +57,9 @@ Regola l'alzata in alto Hausse +++ Große Korrektur nach oben + Nagy állítás fel + Ajuste grande para cima + Korekce nahoru Major adjustment down @@ -54,6 +69,9 @@ Regola l'alzata in basso Hausse --- Große Korrektur nach unten + Nagy állítás le + Ajuste grande para baixo + Korekce dolů Major adjustment right @@ -63,6 +81,9 @@ Regola il tiro a destra Dérive +++ Große Korrektur nach rechts + Nagy állítás jobbra + Ajuste grande para direita + Korekce doprava Major adjustment left @@ -72,6 +93,9 @@ Regola il tiro a sinistra Dérive --- Große Korrektur nach links + Nagy állítás balra + Ajuste grande para esquerda + Korekce doleva Set zero adjustment @@ -81,6 +105,9 @@ Resetta i valori del tiro RAZ corrections Auf 0 justieren + Állítások nullázása + Zerar ajuste + Vynulovat korekci diff --git a/addons/switchunits/functions/fnc_handleMapClick.sqf b/addons/switchunits/functions/fnc_handleMapClick.sqf index bfe36f13ea..e8efa2640f 100644 --- a/addons/switchunits/functions/fnc_handleMapClick.sqf +++ b/addons/switchunits/functions/fnc_handleMapClick.sqf @@ -28,14 +28,9 @@ _sideNearest = []; if ([_x] call FUNC(isValidAi) && (side group _x in _sides)) then { _sideNearest pushBack _x; }; -} forEach (nearestObjects [_pos, ["Man"], 20]); - +} forEach (nearestObjects [_pos, ["Man"], 15]); if (count _sideNearest > 0) then { - private ["_switchUnit"]; - - _switchUnit = _sideNearest select 0; - [ACE_player, _switchUnit] call FUNC(switchUnit); - + [_sideNearest select 0] call FUNC(switchUnit); openMap false; }; diff --git a/addons/switchunits/functions/fnc_initPlayer.sqf b/addons/switchunits/functions/fnc_initPlayer.sqf index c2857f1091..67669c071c 100644 --- a/addons/switchunits/functions/fnc_initPlayer.sqf +++ b/addons/switchunits/functions/fnc_initPlayer.sqf @@ -17,8 +17,6 @@ #include "script_component.hpp" -private ["_playerUnit", "_sides"]; - PARAMS_2(_playerUnit,_sides); if (vehicle _playerUnit == _playerUnit) then { diff --git a/addons/switchunits/functions/fnc_startSwitchUnits.sqf b/addons/switchunits/functions/fnc_startSwitchUnits.sqf index ef344475b9..7985bfa094 100644 --- a/addons/switchunits/functions/fnc_startSwitchUnits.sqf +++ b/addons/switchunits/functions/fnc_startSwitchUnits.sqf @@ -16,13 +16,10 @@ #include "script_component.hpp" - -private "_player"; -_player = _this select 0; - +PARAMS_1(_player); if (GVAR(EnableSwitchUnits)) then { - private ["_sides"]; + private "_sides"; _sides = []; if(GVAR(SwitchToWest)) then {_sides pushBack west;}; diff --git a/addons/switchunits/functions/fnc_switchUnit.sqf b/addons/switchunits/functions/fnc_switchUnit.sqf index b1879b0999..c263bdd721 100644 --- a/addons/switchunits/functions/fnc_switchUnit.sqf +++ b/addons/switchunits/functions/fnc_switchUnit.sqf @@ -32,11 +32,11 @@ if (GVAR(EnableSafeZone)) then { _allNearestPlayers = [position _unit, GVAR(SafeZoneRadius)] call FUNC(nearestPlayers); _nearestEnemyPlayers = [_allNearestPlayers, {((side GVAR(OriginalGroup)) getFriend (side _this) < 0.6) && !(_this getVariable [QGVAR(IsPlayerControlled), false])}] call EFUNC(common,filter); - + if (count _nearestEnemyPlayers > 0) exitWith { _leave = true; }; - + }; // exitWith doesn't exit past the "if(EnableSafeZone)" block @@ -56,14 +56,14 @@ DFUNC(pfhSwitchUnit) = { private ["_args", "_unit", "_oldUnit", "_respawnEhId", "_oldOwner"]; _args = _this select 0; - + _unit = _args select 0; _oldUnit = _args select 1; - - - + + + if (local _unit) exitWith { - + _oldUnit setVariable [QGVAR(IsPlayerControlled), false, true]; _oldUnit setVariable [QGVAR(PlayerControlledName), "", true]; @@ -89,9 +89,9 @@ DFUNC(pfhSwitchUnit) = { }; [localize "STR_ACE_SwitchUnits_SwitchedUnit"] call EFUNC(common,displayTextStructured); - + [(_this select 1)] call cba_fnc_removePerFrameHandler; - + }; }; diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 58b0b46d6d..8121e3e61e 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -4,13 +4,14 @@ Switched unit Einheit gewechselt - Юнит переключен + Юнит переключён Prohozená jednotka Przełącz jednostkę Cambiado de unidad Unité changée Egység átváltva Cambia unità + Trocado de unidade This unit is too close to the enemy. @@ -22,6 +23,7 @@ Cette unité est trop proche des ennemis Ez az egység túl közel van az ellenséghez. Questa unità è troppo vicina al nemico. + Essa unidade está muito perta do inimigo. diff --git a/addons/thermals/config.cpp b/addons/thermals/config.cpp index 252a440535..07d19d1b50 100644 --- a/addons/thermals/config.cpp +++ b/addons/thermals/config.cpp @@ -5,7 +5,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {ace_common}; + requiredAddons[] = {"ace_common"}; author[] = {"[TF]Nkey"}; authorUrl = "https://github.com/michail-nikolaev/"; VERSION_CONFIG; diff --git a/addons/vector/initKeybinds.sqf b/addons/vector/initKeybinds.sqf index 31fb3bbd1b..79df40b0a2 100644 --- a/addons/vector/initKeybinds.sqf +++ b/addons/vector/initKeybinds.sqf @@ -1,6 +1,6 @@ // by commy2 -["ACE3", QGVAR(AzimuthKey), localize "STR_ACE_Vector_AzimuthKey", +["ACE3 Equipment", QGVAR(AzimuthKey), localize "STR_ACE_Vector_AzimuthKey", { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -29,7 +29,7 @@ [15, [false, false, false]], false, 0] call CBA_fnc_addKeybind; //Tab Key -["ACE3", QGVAR(DistanceKey), localize "STR_ACE_Vector_DistanceKey", +["ACE3 Equipment", QGVAR(DistanceKey), localize "STR_ACE_Vector_DistanceKey", { // Conditions: canInteract if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/vector/stringtable.xml b/addons/vector/stringtable.xml index edef7a7bea..80135294d4 100644 --- a/addons/vector/stringtable.xml +++ b/addons/vector/stringtable.xml @@ -22,7 +22,7 @@ Dálkoměr Telemetro Távolságmérő - Telêmetro + Medidor de Distância Дальномер @@ -44,10 +44,10 @@ Vector - Touche Distance Vector - Odległość Vector - Zobrazit vzdálenost - Vecto - Tasto Distanza + Vector - Tasto Distanza Vector - Tecla de Distância Vector - Távolság gomb Vector – Расстояние - \ No newline at end of file + diff --git a/addons/vehiclelock/CfgEventHandlers.hpp b/addons/vehiclelock/CfgEventHandlers.hpp index cf704d000c..6fbbd5c243 100644 --- a/addons/vehiclelock/CfgEventHandlers.hpp +++ b/addons/vehiclelock/CfgEventHandlers.hpp @@ -15,3 +15,20 @@ class Extended_InventoryOpened_EventHandlers { }; }; }; +class Extended_InitPost_EventHandlers { + class Car { + class ADDON { + serverInit = QUOTE(_this call FUNC(handleVehicleInitPost)); + }; + }; + class Tank { + class ADDON { + serverInit = QUOTE(_this call FUNC(handleVehicleInitPost)); + }; + }; + class Helicopter { + class ADDON { + serverInit = QUOTE(_this call FUNC(handleVehicleInitPost)); + }; + }; +}; diff --git a/addons/vehiclelock/CfgMagazines.hpp b/addons/vehiclelock/CfgMagazines.hpp index 100df8065b..d57e8fff6f 100644 --- a/addons/vehiclelock/CfgMagazines.hpp +++ b/addons/vehiclelock/CfgMagazines.hpp @@ -6,5 +6,6 @@ class CfgMagazines { descriptionShort = "$STR_ACE_Vehicle_Item_Custom_Description"; count = 1; mass = 0; + ACE_isUnique = 1; }; }; diff --git a/addons/vehiclelock/CfgVehicles.hpp b/addons/vehiclelock/CfgVehicles.hpp index 65ad0568d6..94bcf34317 100644 --- a/addons/vehiclelock/CfgVehicles.hpp +++ b/addons/vehiclelock/CfgVehicles.hpp @@ -1,50 +1,65 @@ #define MACRO_LOCK_ACTIONS \ - class ACE_MainActions { \ + class ACE_SelfActions { \ class ACE_unlockVehicle { \ displayName = "$STR_ACE_Vehicle_Action_UnLock"; \ - distance = 4; \ condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(2,3)]}); \ statement = QUOTE([ARR_3('VehicleLock_SetVehicleLock', [_target], [ARR_2(_target,false)])] call EFUNC(common,targetEvent)); \ - showDisabled = 0; \ priority = 0.3; \ icon = QUOTE(PATHTOF(UI\key_menuIcon_ca.paa)); \ }; \ class ACE_lockVehicle { \ displayName = "$STR_ACE_Vehicle_Action_Lock"; \ - distance = 4; \ condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(0,1)]}); \ statement = QUOTE([ARR_3('VehicleLock_SetVehicleLock', [_target], [ARR_2(_target,true)])] call EFUNC(common,targetEvent)); \ - showDisabled = 0; \ priority = 0.2; \ icon = QUOTE(PATHTOF(UI\key_menuIcon_ca.paa)); \ }; \ class ACE_lockpickVehicle { \ displayName = "$STR_ACE_Vehicle_Action_Lockpick"; \ - distance = 4; \ condition = QUOTE([ARR_3(_player, _target, 'canLockpick')] call FUNC(lockpick)); \ statement = QUOTE([ARR_3(_player, _target, 'startLockpick')] call FUNC(lockpick)); \ - showDisabled = 0; \ priority = 0.1; \ }; \ + }; \ + class ACE_Actions { \ + class ACE_MainActions { \ + class ACE_unlockVehicle { \ + displayName = "$STR_ACE_Vehicle_Action_UnLock"; \ + distance = 4; \ + condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(2,3)]}); \ + statement = QUOTE([ARR_3('VehicleLock_SetVehicleLock', [_target], [ARR_2(_target,false)])] call EFUNC(common,targetEvent)); \ + priority = 0.3; \ + icon = QUOTE(PATHTOF(UI\key_menuIcon_ca.paa)); \ + }; \ + class ACE_lockVehicle { \ + displayName = "$STR_ACE_Vehicle_Action_Lock"; \ + distance = 4; \ + condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(0,1)]}); \ + statement = QUOTE([ARR_3('VehicleLock_SetVehicleLock', [_target], [ARR_2(_target,true)])] call EFUNC(common,targetEvent)); \ + priority = 0.2; \ + icon = QUOTE(PATHTOF(UI\key_menuIcon_ca.paa)); \ + }; \ + class ACE_lockpickVehicle { \ + displayName = "$STR_ACE_Vehicle_Action_Lockpick"; \ + distance = 4; \ + condition = QUOTE([ARR_3(_player, _target, 'canLockpick')] call FUNC(lockpick)); \ + statement = QUOTE([ARR_3(_player, _target, 'startLockpick')] call FUNC(lockpick)); \ + priority = 0.1; \ + }; \ + }; \ }; class CfgVehicles { class LandVehicle; class Car: LandVehicle { - class ACE_Actions { - MACRO_LOCK_ACTIONS - }; + MACRO_LOCK_ACTIONS }; class Tank: LandVehicle { - class ACE_Actions { - MACRO_LOCK_ACTIONS - }; + MACRO_LOCK_ACTIONS }; class Air; class Helicopter: Air { - class ACE_Actions { - MACRO_LOCK_ACTIONS - }; + MACRO_LOCK_ACTIONS }; class Logic; @@ -55,7 +70,7 @@ class CfgVehicles { author = "$STR_ACE_Common_ACETeam"; category = "ACE"; displayName = "Vehicle Lock Setup"; - function = QUOTE(DFUNC(moduleInit)); + function = QFUNC(moduleInit); scope = 2; isGlobal = 0; icon = QUOTE(PATHTOF(UI\Icon_Module_VehicleLock_ca.paa)); @@ -67,9 +82,9 @@ class CfgVehicles { typeName = "BOOL"; defaultValue = 0; }; - class SetLockState { - displayName = "Set Lock State"; // Argument label - description = "Set lock state for all vehicles on map at start"; // Tooltip description + class VehicleStartingLockState { + displayName = "Vehicle Starting Lock State"; // Argument label + description = "Set lock state for all vehicles (removes ambiguous lock states)"; // Tooltip description typeName = "NUMBER"; // Value type, can be "NUMBER", "STRING" or "BOOL" class values { class None {name = "As Is"; value = 0; default = 1;}; @@ -93,7 +108,7 @@ class CfgVehicles { author = "$STR_ACE_Common_ACETeam"; category = "ACE"; displayName = "Vehicle Key Assign"; - function = QUOTE(DFUNC(moduleSync)); + function = QFUNC(moduleSync); scope = 2; isGlobal = 0; icon = QUOTE(PATHTOF(UI\Icon_Module_VehicleKey_ca.paa)); diff --git a/addons/vehiclelock/XEH_preInit.sqf b/addons/vehiclelock/XEH_preInit.sqf index bdab28fc75..18a7062c24 100644 --- a/addons/vehiclelock/XEH_preInit.sqf +++ b/addons/vehiclelock/XEH_preInit.sqf @@ -4,6 +4,7 @@ ADDON = false; PREP(addKeyForVehicle); PREP(getVehicleSideKey); +PREP(handleVehicleInitPost); PREP(hasKeyForVehicle); PREP(lockpick); PREP(moduleInit); diff --git a/addons/vehiclelock/config.cpp b/addons/vehiclelock/config.cpp index 248a1e7ca0..76d5817d8d 100644 --- a/addons/vehiclelock/config.cpp +++ b/addons/vehiclelock/config.cpp @@ -7,7 +7,7 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; author[] = {"PabstMirror"}; - authorUrl = "https://github.com/PabstMirror/"; + authorUrl = "https://github.com/acemod/ACE3"; VERSION_CONFIG; }; }; @@ -20,6 +20,10 @@ class ACE_Settings { class GVAR(LockVehicleInventory) { value = 0; typeName = "BOOL"; + }; + class GVAR(VehicleStartingLockState) { + value = -1; + typeName = "SCALAR"; }; }; diff --git a/addons/vehiclelock/functions/fnc_handleVehicleInitPost.sqf b/addons/vehiclelock/functions/fnc_handleVehicleInitPost.sqf new file mode 100644 index 0000000000..5a2bc3f7bd --- /dev/null +++ b/addons/vehiclelock/functions/fnc_handleVehicleInitPost.sqf @@ -0,0 +1,41 @@ +/* + * Author: PabstMirror + * For every lockable vehicle, sets the starting lock state to a sane value. + * Only run if the InitModule is placed. + * + * Arguments: + * 0: Vehicle + * + * Return Value: + * None + * + * Example: + * [car] call ACE_VehicleLock_fnc_handleVehicleInitPost + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_1(_vehicle); + +if (!isServer) exitWith {}; + +[{ + //If the module wasn't placed, just exit (needs to be in wait because objectInitEH is before moduleInit) + if (GVAR(VehicleStartingLockState) == -1) exitWith {}; + private ["_lock"]; + PARAMS_1(_vehicle); + if ((_vehicle isKindOf "Car") || {_vehicle isKindOf "Tank"} || {_vehicle isKindOf "Helicopter"}) then { + //set lock state (eliminates the ambigious 1-"Default" and 3-"Locked for Player" states) + _lock = switch (GVAR(VehicleStartingLockState)) do { + case (0): {(locked _vehicle) in [2, 3]}; + case (1):{true}; + case (2):{false}; + }; + if (((_lock) && {(locked _vehicle) != 2}) || {(!_lock) && {(locked _vehicle) != 0}}) then { + TRACE_3("Setting Lock State",_lock,(typeOf _vehicle),_vehicle); + ["VehicleLock_SetVehicleLock", [_vehicle], [_vehicle, _lock]] call EFUNC(common,targetEvent); + }; + }; + //Delay call until mission start (so everyone has the eventHandler's installed) +}, [_vehicle], 0.25, 0.25] call EFUNC(common,waitAndExecute); diff --git a/addons/vehiclelock/functions/fnc_moduleInit.sqf b/addons/vehiclelock/functions/fnc_moduleInit.sqf index c26e8aacbd..510b8ec7be 100644 --- a/addons/vehiclelock/functions/fnc_moduleInit.sqf +++ b/addons/vehiclelock/functions/fnc_moduleInit.sqf @@ -17,8 +17,6 @@ */ #include "script_component.hpp" -private ["_sideKeysAssignment", "_setLockState", "_lock"]; - PARAMS_3(_logic,_syncedUnits,_activated); if (!_activated) exitWith {WARNING("Vehicle Lock Init Module - placed but not active");}; @@ -27,23 +25,4 @@ if (!isServer) exitWith {}; //Set the GVAR for default lockpick strength [_logic, QGVAR(DefaultLockpickStrength), "DefaultLockpickStrength"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(LockVehicleInventory), "LockVehicleInventory"] call EFUNC(common,readSettingFromModule); - -_setLockState = _logic getVariable["SetLockState", 0]; -[{ - PARAMS_1(_setLockState); - { - if ((_x isKindOf "Car") || {_x isKindOf "Tank"} || {_x isKindOf "Helicopter"}) then { - //set lock state (eliminates the ambigious 1-"Default" and 3-"Locked for Player" states) - _lock = switch (_setLockState) do { - case (0): {(locked _x) in [2, 3]}; - case (1):{true}; - case (2):{false}; - }; - if (((_lock) && {(locked _x) != 2}) || {(!_lock) && {(locked _x) != 0}}) then { - TRACE_3("Setting Lock State", _lock, (typeOf _x), _x); - ["VehicleLock_SetVehicleLock", [_x], [_x, _lock]] call EFUNC(common,targetEvent); - }; - }; - } forEach vehicles; - //Delay call until mission start (so everyone has the eventHandler's installed) -}, [_setLockState], 0.25, 0.25] call EFUNC(common,waitAndExecute); +[_logic, QGVAR(VehicleStartingLockState), "VehicleStartingLockState"] call EFUNC(common,readSettingFromModule); diff --git a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf index 65c3068dce..8199f4b850 100644 --- a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf +++ b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf @@ -34,7 +34,7 @@ if (GVAR(LockVehicleInventory) && //if setting not enabled playSound "ACE_Sound_Click"; //don't open the vehicles inventory _handeled = true; - //Just opens a dummy groundContainer + //Just opens a dummy groundContainer (so the player can still see their own inventory) ACE_player action ["Gear", objNull]; }; diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index e62f9fdc5f..6ccfc8347b 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -4,24 +4,26 @@ Unlock Vehicle Fahrzeug aufschließen - Vehículo abierto + Abrir vehículo Déverrouiller le véhicule Odblokuj pojazd Odemknout vozidlo Jármű nyitása Открыть машину - Apri il veicolo + Sblocca il veicolo + Destravar veículo Lock Vehicle Fahrzeug abschließen - Vehículo cerrado + Cerrar vehículo Verrouiller le véhicule Zablokuj pojazd Zamknout vozidlo Jármű zárása Закрыть машину - Chiudi il veicolo + Chiudi il veicolo a chiave + Travar Veículo Lockpick Vehicle @@ -33,17 +35,19 @@ Jármű feltörése Взломать замок Scassina veicolo + Usar mixa no Veículo Picking Lock.... Schloss knacken... - Forzando cierre... + Forzando cerradura... Crochetage... Otwieranie zamka... Páčim vozidlo... Zár feltörése... Взламываем замок... Scassino il veicolo.... + Usando Mixa... A custom key that will open a specific vehicle. @@ -55,6 +59,7 @@ Egy egyedi kulcs, ami egy meghatározott járművet nyit ki. Ключ от конкретной машины. Una chiave personalizzata che apre determinati veicoli. + Uma chave específica que abre um veículo específico. A Master Key will open any lock, no matter what! @@ -65,62 +70,68 @@ Hlavní klíč otevře libovolný zámek, bez vyjímek! Egy főkulcs, ami minden zárat kinyit, helyzettől függetlenül! Универсальный ключ, открывающий любой замок. - Una chiave principale che apre qualsiasi serratura! + Un passe-partout che apre qualsiasi serratura! + Uma chave mestre irá abrir qualquer fechadura, não importa qual! A lockpick set that can pick the locks of most vehicles. Ein Dietrich der die meisten Fahrzeugschlösser knacken kann... - Un set de ganzúas puede abrir la mayoría de cerraduras de vehículos. + Un set de ganzúas que puede abrir las cerraduras de la mayoría vehículos. Un crochet qui ouvrira la plupart des véhicules. Zestaw wytrychów, dzięki któremu można otworzyć zamki w większości pojazdów. Sada paklíčů, která dokáže odemknout zámky u většiny vozidel. Egy tolvajkulcs-készlet, mely a legtöbb jármű zárjait fel tudja törni. Набор отмычек, которым можно взломать почти любую машину. Un grimardello per forzare la maggior parte dei veicoli + Um set de chave mixas que pode abrir a maioria dos veículos. A key that should open most WEST vehicles. Ein Schlüssel der die meisten westlichen Fahrzeuge öffnen sollte... - Una llave que puede abrir la mayoría de vehículos occidentales. + Una llave que abrirá la mayoría de vehículos occidentales. Une clé qui ouvrira la plupart des véhicules OUEST. Klucz, który powinien otworzyć większość pojazdów ZACHODU. Klíč který by měl otevřít většinou Západních vozidel. Egy kulcs, ami a NYUGAT egységeinek legtöbb járművét ki tudja nyitni. Ключ для открытия большинства машин Красных. - Una chiave che apre la maggior parte dei veicoli WEST + Una chiave che apre la maggior parte dei veicoli occidentali + Uma chave que abre a maioria dos veículos ocidentais A key that should open most EAST vehicle. Ein Schlüssel der die meisten östlichen Fahrzeuge öffnen sollte... - Una llave que puede abrir la mayoría de vehículos orientales. + Una llave que abrirá la mayoría de vehículos orientales. Une clé qui ouvrira la plupart des véhicules EST. Klucz, który powinien otworzyć większość pojazdów WSCHODU. Egy kulcs, ami a KELET egységeinek legtöbb járművét ki tudja nyitni. Klíč který by měl otevřít vetšinu Východních vozidel. Ключ для открытия большинства машин Синих. - Una chaive che apr ela maggior parte dei veicoli EAST + Una chaive che apre la maggior parte dei veicoli orientali + Uma chave que abre a maioria dos veículos orientais A key that should open most INDEP vehicle. Ein Schlüssel der die meisten Fahrzeuge der Aufständischen öffnen sollte... - Una llave que puede abrir la mayoría de vehículos independientes. + Una llave que abrirá la mayoría de vehículos independientes. Une clé qui ouvrira la plupart des véhicules INDEP. Klucz, który powinien otworzyć większość pojazdów INDFOR. Egy kulcs, ami a FÜGGETLEN egységek legtöbb járművét ki tudja nyitni. Klíč který by měl otevřít většinu Nezávislých vozidel. Ключ для открытия большинства машин Независимых. - Una chaive che apr ela maggior parte dei veicoli INDEP + Una chaive che apre la maggior parte dei veicoli degli indipendenti + Uma chave que abre a maioria dos veículos independentes A key that should open most CIV vehicle. Ein Schlüssel der die meisten zivilen Fahrzeuge öffnen sollte... - Una llave que puede abrir la mayoría de vehículos civiles. + Una llave que abrirá la mayoría de vehículos civiles. Une clé qui ouvrira la plupart des véhicules CIV. Klucz, który powinien otworzyć większość pojazdów CYWILNYCH. Klíč který by měl otevřít většinu Civilních vozidel. Egy kulcs, ami a CIVIL járművek többségét ki tudja nyitni. Ключ для открытия большинства машин Гражданских. - Una chaive che apr ela maggior parte dei veicoli CIV + Una chaive che apr ela maggior parte dei veicoli civili + Uma chave que abre a maioria dos veículos civis. diff --git a/addons/vehicles/XEH_postInit.sqf b/addons/vehicles/XEH_postInit.sqf index c7665cf2aa..6ff723338b 100644 --- a/addons/vehicles/XEH_postInit.sqf +++ b/addons/vehicles/XEH_postInit.sqf @@ -4,7 +4,7 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", QGVAR(speedLimiter), localize "STR_ACE_SpeedLimiter", +["ACE3 Vehicles", QGVAR(speedLimiter), localize "STR_ACE_SpeedLimiter", { // Conditions: canInteract if !([ACE_player, objNull, ["isnotinside"]] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/weaponselect/XEH_postInit.sqf b/addons/weaponselect/XEH_postInit.sqf index 93813b4ed0..ab77f5d2ee 100644 --- a/addons/weaponselect/XEH_postInit.sqf +++ b/addons/weaponselect/XEH_postInit.sqf @@ -4,7 +4,7 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", QGVAR(SelectPistolNew), localize "STR_ACE_WeaponSelect_SelectPistol", +["ACE3 Weapons", QGVAR(SelectPistolNew), localize "STR_ACE_WeaponSelect_SelectPistol", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -18,7 +18,7 @@ if !(hasInterface) exitWith {}; {false}, [0, [false, false, false]], false] call cba_fnc_addKeybind; //1 Key -["ACE3", QGVAR(SelectRifleNew), localize "STR_ACE_WeaponSelect_SelectRifle", +["ACE3 Weapons", QGVAR(SelectRifleNew), localize "STR_ACE_WeaponSelect_SelectRifle", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -32,7 +32,7 @@ if !(hasInterface) exitWith {}; {false}, [0, [false, false, false]], false] call cba_fnc_addKeybind; //2 Key -["ACE3", QGVAR(SelectRifleMuzzleNew), localize "STR_ACE_WeaponSelect_SelectRifleMuzzle", +["ACE3 Weapons", QGVAR(SelectRifleMuzzleNew), localize "STR_ACE_WeaponSelect_SelectRifleMuzzle", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -46,7 +46,7 @@ if !(hasInterface) exitWith {}; {false}, [0, [false, false, false]], false] call cba_fnc_addKeybind; //3 Key -["ACE3", QGVAR(SelectLauncherNew), localize "STR_ACE_WeaponSelect_SelectLauncher", +["ACE3 Weapons", QGVAR(SelectLauncherNew), localize "STR_ACE_WeaponSelect_SelectLauncher", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -60,7 +60,7 @@ if !(hasInterface) exitWith {}; {false}, [0, [false, false, false]], false] call cba_fnc_addKeybind; //4 Key -["ACE3", QGVAR(SelectBinocularNew), localize "STR_ACE_WeaponSelect_SelectBinocular", +["ACE3 Weapons", QGVAR(SelectBinocularNew), localize "STR_ACE_WeaponSelect_SelectBinocular", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -74,7 +74,7 @@ if !(hasInterface) exitWith {}; {false}, [0, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key -["ACE3", QGVAR(SelectGrenadeFrag), localize "STR_ACE_WeaponSelect_SelectGrenadeFrag", +["ACE3 Weapons", QGVAR(SelectGrenadeFrag), localize "STR_ACE_WeaponSelect_SelectGrenadeFrag", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -88,7 +88,7 @@ if !(hasInterface) exitWith {}; {false}, [7, [false, false, false]], false] call cba_fnc_addKeybind; //6 Key -["ACE3", QGVAR(SelectGrenadeOther), localize "STR_ACE_WeaponSelect_SelectGrenadeOther", +["ACE3 Weapons", QGVAR(SelectGrenadeOther), localize "STR_ACE_WeaponSelect_SelectGrenadeOther", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -102,7 +102,7 @@ if !(hasInterface) exitWith {}; {false}, [8, [false, false, false]], false] call cba_fnc_addKeybind; //7 Key -["ACE3", QGVAR(HolsterWeapon), localize "STR_ACE_WeaponSelect_HolsterWeapon", +["ACE3 Weapons", QGVAR(HolsterWeapon), localize "STR_ACE_WeaponSelect_HolsterWeapon", { // Conditions: canInteract if !([ACE_player, ACE_player, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -116,7 +116,7 @@ if !(hasInterface) exitWith {}; {false}, [11, [false, false, false]], false] call cba_fnc_addKeybind; //0 Key -["ACE3", QGVAR(EngineOn), localize "STR_ACE_WeaponSelect_EngineOn", +["ACE3 Vehicles", QGVAR(EngineOn), localize "STR_ACE_WeaponSelect_EngineOn", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -130,7 +130,7 @@ if !(hasInterface) exitWith {}; {false}, [3, [false, false, false]], false] call cba_fnc_addKeybind; //2 Key -["ACE3", QGVAR(EngineOff), localize "STR_ACE_WeaponSelect_EngineOff", +["ACE3 Vehicles", QGVAR(EngineOff), localize "STR_ACE_WeaponSelect_EngineOff", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -144,7 +144,7 @@ if !(hasInterface) exitWith {}; {false}, [2, [false, false, false]], false] call cba_fnc_addKeybind; //1 Key -["ACE3", QGVAR(SelectMainGunNew), localize "STR_ACE_WeaponSelect_SelectMainGun", +["ACE3 Vehicles", QGVAR(SelectMainGunNew), localize "STR_ACE_WeaponSelect_SelectMainGun", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -158,7 +158,7 @@ if !(hasInterface) exitWith {}; {false}, [0, [false, false, false]], false] call cba_fnc_addKeybind; //3 Key -["ACE3", QGVAR(SelectMachineGunNew), localize "STR_ACE_WeaponSelect_SelectMachineGun", +["ACE3 Vehicles", QGVAR(SelectMachineGunNew), localize "STR_ACE_WeaponSelect_SelectMachineGun", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -172,7 +172,7 @@ if !(hasInterface) exitWith {}; {false}, [0, [false, false, false]], false] call cba_fnc_addKeybind; //4 Key -["ACE3", QGVAR(SelectMissilesNew), localize "STR_ACE_WeaponSelect_SelectMissiles", +["ACE3 Vehicles", QGVAR(SelectMissilesNew), localize "STR_ACE_WeaponSelect_SelectMissiles", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; @@ -186,7 +186,7 @@ if !(hasInterface) exitWith {}; {false}, [0, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key -["ACE3", QGVAR(FireSmokeLauncher), localize "STR_ACE_WeaponSelect_FireSmokeLauncher", +["ACE3 Vehicles", QGVAR(FireSmokeLauncher), localize "STR_ACE_WeaponSelect_FireSmokeLauncher", { // Conditions: canInteract if !([ACE_player, ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 6e06025620..810fda21c9 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -4,24 +4,26 @@ Display text on grenade throw Zeige Text beim Granatwurf - Mostrar texto al lanzar granada + Mostrar texto al lanzar una granada Показывать текст при броске Zobrazí text při hodu granátem Wyświetl tekst przy rzucie granatem Afficher texte lors d'un lancé de grenade Szöveg mutatása gránát eldobásakor Mostra indicazioni nel lancio granate + Mostrat texto ao lançar granada Display a hint or text on grenade throw. Zeige Hinweis oder Text beim Granatwurf - Muestra una notificación o texto al lanzar granada + Muestra una notificación o texto al lanzar una granada Показывать текст или подсказку при броске гранаты. Zobrazí upozornění nebo text při hodu granátem. Wyświetla powiadomienie lub tekst przy rzucie granatem. Afficher texte/info au lancé de grenade Jelez egy súgót vagy szöveget a gránát eldobásakor. - Mostra un suggerimento quando si lanciano granate + Mostra una notifica quando si lanciano granate + Mostra um hint ou texto ao lançar uma granada Select Pistol @@ -45,7 +47,7 @@ Sélectionner Fusil Puska Kiválasztása Selecionar Rifle - Seleziona il Fucile + Seleziona il fucile Select Launcher @@ -53,23 +55,23 @@ Seleccionar lanzador Wybierz wyrzutnię Zvolit Raketomet - Выбрать гранатомет + Выбрать гранатомёт Sélectionner Lanceur Rakétavető Kiválasztása Selecionar Lançador - Seleziona il Lanciamissili + Seleziona il lanciamissili Select Grenade Launcher Granatwerfer auswählen - Seleccionar lanzador de granadas + Seleccionar lanzagranadas Wybierz granatnik Zvolit Granátomet - Выбрать подствольный гранатомет + Выбрать подствольный гранатомёт Sélectionner Lance-grenades Gránátvető Kiválasztása Selecionar Lança-Granadas - Seleziona il Lanciagranate + Seleziona il lanciagranate Select Binoculars @@ -165,6 +167,7 @@ Граната %1 Grenade %1 Granata %1 + Granada %1 Ready Grenade @@ -176,6 +179,7 @@ Подготовить гранату Grenade prête Granata pronta + Granada pronta Select Frag Grenade @@ -204,7 +208,7 @@ Throw Selected Grenade Gewählte Granate werfen - Arrojar granada seleccionada + Lanzar granada seleccionada Rzuć wybrany granat Lancer la grenade sélectionnée Kiválasztott Gránát Eldobása @@ -223,11 +227,12 @@ Nincs több gránát Гранат не осталось Granate esaurite + Sem mais granadas No frags left Keine explosiven Granaten übrig - Sin granadas de fragmentación + No quedan granadas de fragmentación Brak granatów odłamkowych Plus de grenades à fragmentation Nincs több repeszgránát @@ -239,7 +244,7 @@ No misc. grenades left Keine nichtexplosiven Granaten übrig - Sin granadas de varias + Sin granadas misc. Brak granatów nieodłamkowych Plus de grenades non-léthales Nincs több egyéb gránát @@ -270,6 +275,7 @@ Füstvető eltüzelése Пустить дымовую завесу Lancia fumogeno + Lançador de fumaça diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 1427ff59b1..455c336d96 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -25,7 +25,7 @@ GVAR(rain_period_start_time) = time; }; }; -["ACE3", QGVAR(WindInfoKey), localize "STR_ACE_Weather_WindInfoKey", +["ACE3 Common", QGVAR(WindInfoKey), localize "STR_ACE_Weather_WindInfoKey", { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index 0f49226432..6e6e008a67 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -5,6 +5,8 @@ ADDON = false; PREP(calculateAirDensity); PREP(calculateBarometricPressure); +PREP(calculateRoughnessLength); +PREP(calculateWindSpeed); PREP(displayWindInfo); PREP(getMapData); PREP(getWind); diff --git a/addons/weather/config.cpp b/addons/weather/config.cpp index 39cf223518..18059fe9e8 100644 --- a/addons/weather/config.cpp +++ b/addons/weather/config.cpp @@ -5,8 +5,8 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - author[] = {"q1184", "Rocko", "esteldunedain","Ruthberg"}; + requiredAddons[] = {"ace_common", "ace_modules"}; + author[] = {"q1184", "Rocko", "esteldunedain", "Ruthberg"}; VERSION_CONFIG; }; }; diff --git a/addons/advanced_ballistics/functions/fnc_calculateRoughnessLength.sqf b/addons/weather/functions/fnc_calculateRoughnessLength.sqf similarity index 100% rename from addons/advanced_ballistics/functions/fnc_calculateRoughnessLength.sqf rename to addons/weather/functions/fnc_calculateRoughnessLength.sqf diff --git a/addons/weather/functions/fnc_calculateWindSpeed.sqf b/addons/weather/functions/fnc_calculateWindSpeed.sqf new file mode 100644 index 0000000000..b5cde4e959 --- /dev/null +++ b/addons/weather/functions/fnc_calculateWindSpeed.sqf @@ -0,0 +1,90 @@ +/* + * Author: Ruthberg + * + * Calculates the true wind speed at a given world position + * + * Arguments: + * 0: world position - posASL + * 1: Account for wind gradient + * 2: Account for terrain + * 3: Account for obstacles + * + * Return Value: + * 0: wind speed - m/s + * + * Public: No + */ +#include "script_component.hpp" + +private ["_windSpeed", "_windDir", "_height", "_newWindSpeed", "_windSource", "_roughnessLength"]; + +EXPLODE_4_PVT(_this,_position,_windGradientEnabled,_terrainEffectEnabled,_obstacleEffectEnabled); + +fnc_polar2vect = { + private ["_mag2D"]; + _mag2D = (_this select 0) * cos((_this select 2)); + [_mag2D * sin((_this select 1)), _mag2D * cos((_this select 1)), (_this select 0) * sin((_this select 2))]; +}; + +_windSpeed = vectorMagnitude ACE_wind; +_windDir = (ACE_wind select 0) atan2 (ACE_wind select 1); + +// Wind gradient +if (_windGradientEnabled) then { + if (_windSpeed > 0.05) then { + _height = (ASLToATL _position) select 2; + _height = 0 max _height min 20; + if (_height < 20) then { + _roughnessLength = _position call FUNC(calculateRoughnessLength); + _windSpeed = _windSpeed * abs(ln(_height / _roughnessLength) / ln(20 / _roughnessLength)); + }; + }; +}; + +// Terrain effect on wind +if (_terrainEffectEnabled) then { + if (_windSpeed > 0.05) then { + _newWindSpeed = 0; + { + _windSource = [100, _windDir + 180, _x] call fnc_polar2vect; + if (!(terrainIntersectASL [_position, _position vectorAdd _windSource])) exitWith { + _newWindSpeed = cos(_x * 9) * _windSpeed; + }; + _windSource = [100, _windDir + 180 + _x, 0] call fnc_polar2vect; + if (!(terrainIntersectASL [_position, _position vectorAdd _windSource])) exitWith { + _newWindSpeed = cos(_x * 9) * _windSpeed; + }; + _windSource = [100, _windDir + 180 - _x, 0] call fnc_polar2vect; + if (!(terrainIntersectASL [_position, _position vectorAdd _windSource])) exitWith { + _newWindSpeed = cos(_x * 9) * _windSpeed; + }; + } forEach [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + _windSpeed = _newWindSpeed; + }; +}; + +// Obstacle effect on wind +if (_obstacleEffectEnabled) then { + if (_windSpeed > 0.05) then { + _newWindSpeed = 0; + { + _windSource = [20, _windDir + 180, _x] call fnc_polar2vect; + if (!(lineIntersects [_position, _position vectorAdd _windSource])) exitWith { + _newWindSpeed = cos(_x * 2) * _windSpeed; + }; + _windSource = [20, _windDir + 180 + _x, 0] call fnc_polar2vect; + if (!(lineIntersects [_position, _position vectorAdd _windSource])) exitWith { + _newWindSpeed = cos(_x * 2) * _windSpeed; + }; + _windSource = [20, _windDir + 180 - _x, 0] call fnc_polar2vect; + if (!(lineIntersects [_position, _position vectorAdd _windSource])) exitWith { + _newWindSpeed = cos(_x * 2) * _windSpeed; + }; + } forEach [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]; + _windSpeed = _newWindSpeed; + }; +}; + +_windSpeed = 0 max _windSpeed; + +_windSpeed diff --git a/addons/weather/functions/fnc_displayWindInfo.sqf b/addons/weather/functions/fnc_displayWindInfo.sqf index 7996503719..e81463f41a 100644 --- a/addons/weather/functions/fnc_displayWindInfo.sqf +++ b/addons/weather/functions/fnc_displayWindInfo.sqf @@ -38,15 +38,14 @@ GVAR(WindInfo) = true; _windIndex = 12; _windColor = [1, 1, 1, 1]; - - // Toogle behaviour depending on ace_advanced_ballistics being used or not - // @todo, check ACE_AB is actually enabled - _windSpeed = if (isClass (configFile >> "CfgPatches" >> "ACE_Advanced_Ballistics")) then { - (eyePos ACE_player) call EFUNC(advanced_ballistics,calculateWindSpeed); + _windSpeed = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { + // With wind gradient + [eyePos ACE_player, true, true, true] call FUNC(calculateWindSpeed); } else { - vectorMagnitude ACE_wind; + // Without wind gradient + [eyePos ACE_player, false, true, true] call FUNC(calculateWindSpeed); }; - + if (_windSpeed > 0.2) then { _playerDir = getDir ACE_player; _windDir = (ACE_wind select 0) atan2 (ACE_wind select 1); diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index f2527d1157..55c6e9c3c0 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -34,6 +34,7 @@ if (worldName in ["reshmaan"]) then { GVAR(Latitude) = 35; GVAR(Altitude) = 2000 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; }; +if (worldName in ["Kunduz"]) then { GVAR(Latitude) = 37; GVAR(Altitude) = 400; }; // Assume default wind values // Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece @@ -75,6 +76,23 @@ if (toLower worldName in ["chernarus", "bootcamp_acr", "woodland_acr", "utes"]) GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Prague,Czech-Republic GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82]; + + // Source: https://weatherspark.com/averages/32335/Prague-Central-Bohemia-Czech-Republic + GVAR(WindSpeedMax) = [[6.7, 2.4], [6.8, 2.2], [7.1, 2.0], [6.7, 1.9], [6.5, 1.8], [6.4, 1.8], [6.4, 1.8], [5.9, 1.9], [5.8, 2.1], [5.9, 2.3], [6.4, 2.8], [7.0, 3.0]]; + GVAR(WindSpeedMean) = [4.5, 4.3, 4.4, 4.1, 3.6, 3.6, 3.6, 3.4, 3.6, 0, 4.1, 4.6]; + GVAR(WindSpeedMin) = [[1.5, 1.1], [1.5, 1.1], [1.5, 1.0], [1.2, 0.9], [1.1, 0.8], [1.0, 0.8], [1.0, 1.0], [1.0, 0.9], [1.1, 1.0], [1.0, 1.0], [1.3, 1.1], [1.8, 1.2]]; + GVAR(WindDirectionProbabilities) = [[0.06, 0.02, 0.06, 0.06, 0.10, 0.23, 0.15, 0.06], // January + [0.08, 0.03, 0.08, 0.06, 0.08, 0.18, 0.15, 0.08], // February + [0.08, 0.02, 0.10, 0.06, 0.07, 0.17, 0.15, 0.08], // March + [0.12, 0.04, 0.10, 0.05, 0.06, 0.12, 0.13, 0.10], // April + [0.12, 0.05, 0.09, 0.05, 0.05, 0.10, 0.13, 0.10], // May + [0.12, 0.04, 0.06, 0.03, 0.05, 0.13, 0.16, 0.10], // June + [0.09, 0.03, 0.07, 0.04, 0.06, 0.16, 0.18, 0.10], // July + [0.09, 0.03, 0.08, 0.04, 0.06, 0.15, 0.16, 0.09], // August + [0.07, 0.03, 0.08, 0.06, 0.08, 0.18, 0.15, 0.08], // September + [0.06, 0.03, 0.10, 0.07, 0.10, 0.19, 0.13, 0.05], // October + [0.06, 0.02, 0.08, 0.07, 0.10, 0.15, 0.13, 0.05], // November + [0.06, 0.02, 0.06, 0.06, 0.10, 0.24, 0.15, 0.05]];// December }; if (toLower worldName in ["takistan", "zargabad", "mountains_acr", "shapur_baf", "provinggrounds_pmc"]) exitWith { @@ -83,6 +101,23 @@ if (toLower worldName in ["takistan", "zargabad", "mountains_acr", "shapur_baf", GVAR(TempNight) = [-7.1, -5.7, 0.7, 6, 8.8, 12.4, 15.3, 14.3, 9.4, 3.9, -1.2, -4.7]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Kabul,Afghanistan GVAR(Humidity) = [68, 69, 62, 60, 49, 37, 38, 39, 40, 41, 56, 61]; + + // Source: https://weatherspark.com/averages/32750/Kabul-Afghanistan + GVAR(WindSpeedMax) = [[4.0, 1.0], [4.1, 1.0], [5.1, 1.1], [6.9, 1.2], [8.9, 1.2], [10.0, 1.1], [9.1,1.0], [8.2, 1.0], [6.9, 1.0], [5.2, 1.0], [3.8, 0.9], [3.7, 0.9]]; + GVAR(WindSpeedMean) = [2.2, 2.2, 2.5, 2.8, 3.8, 4.4, 0, 3.3, 2.7, 2.4, 1.8, 1.9]; + GVAR(WindSpeedMin) = [[0.2, 0.4], [0.2, 0.4], [0.2, 0.4], [0.3, 0.4], [0.6, 0.4], [0.9, 0.4], [0.7, 0.4], [0.5, 0.4], [0.2, 0.5], [0.1, 0.1], [0, 0.1], [0, 0.1]]; + GVAR(WindDirectionProbabilities) = [[0.04, 0.02, 0.05, 0.04, 0.05, 0.04, 0.11, 0.29], // January + [0.08, 0.04, 0.06, 0.04, 0.06, 0.04, 0.10, 0.20], // February + [0.12, 0.06, 0.08, 0.04, 0.05, 0.04, 0.09, 0.19], // March + [0.18, 0.07, 0.09, 0.05, 0.05, 0.04, 0.08, 0.16], // April + [0.27, 0.05, 0.05, 0.03, 0.04, 0.03, 0.08, 0.16], // May + [0.35, 0.04, 0.04, 0.02, 0.02, 0.02, 0.07, 0.13], // June + [0.30, 0.07, 0.09, 0.04, 0.02, 0.02, 0.05, 0.10], // July + [0.23, 0.07, 0.08, 0.06, 0.03, 0.02, 0.05, 0.10], // August + [0.15, 0.06, 0.10, 0.06, 0.04, 0.02, 0.07, 0.13], // September + [0.12, 0.04, 0.07, 0.06, 0.04, 0.03, 0.10, 0.17], // October + [0.07, 0.03, 0.06, 0.05, 0.06, 0.02, 0.10, 0.20], // November + [0.05, 0.03, 0.06, 0.05, 0.06, 0.04, 0.11, 0.26]];// December }; if (toLower worldName in ["fallujah"]) exitWith { @@ -99,6 +134,24 @@ if (toLower worldName in ["fata", "Abbottabad"]) exitWith { GVAR(TempNight) = [-0.6, 2.4, 7.4, 13.1, 18.2, 22.8, 23.8, 22.9, 19.2, 12, 5.6, 1.2]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Zhob,Pakistan GVAR(Humidity) = [50, 40, 42, 40, 30, 30, 50, 49, 40, 32, 38, 41]; + + // Source: https://weatherspark.com/averages/31382/Shkin-Paktika-Afghanistan + GVAR(WindSpeedMax) = [[3.0, 1.0], [3.3, 1.0], [4.0, 1.0], [4.3, 1.4], [4.3, 1.5], [4.6, 1.4], [4.5, 1.3], [4.0, 0.9], [4.0, 1.0], [3.5, 1.0], [3.4, 1.0], [3.1, 1.0]]; + GVAR(WindSpeedMean) = [1.3, 1.5, 1.6, 1.7, 1.7, 1.7, 1.6, 1.5, 1.5, 1.4, 1.4, 1.2]; + GVAR(WindSpeedMin) = [[0.2, 0.1], [0.2, 0.1], [0.2, 0.1], [0.2, 0.1], [0.1, 0.1], [0.1, 0.1], [0.3, 0.1], [0.2, 0.1], [0.1, 0.1], [0.1, 0.1], [0.1, 0.1], [0.1, 0.1]]; + GVAR(WindDirectionProbabilities) = [[0.09, 0.03, 0.02, 0.03, 0.05, 0.07, 0.07, 0.18], // January + [0.07, 0.02, 0.01, 0.05, 0.10, 0.10, 0.06, 0.12], // February + [0.07, 0.02, 0.01, 0.07, 0.14, 0.11, 0.08, 0.12], // March + [0.07, 0.04, 0.03, 0.05, 0.12, 0.08, 0.06, 0.13], // April + [0.10, 0.03, 0.02, 0.04, 0.10, 0.09, 0.08, 0.18], // May + [0.12, 0.05, 0.04, 0.05, 0.08, 0.06, 0.06, 0.16], // June + [0.06, 0.04, 0.02, 0.06, 0.05, 0.01, 0.02, 0.06], // July + [0.08, 0.03, 0.04, 0.05, 0.09, 0.04, 0.02, 0.06], // August + [0.10, 0.04, 0.02, 0.06, 0.11, 0.09, 0.06, 0.13], // September + [0.07, 0.02, 0.01, 0.04, 0.11, 0.08, 0.08, 0.19], // October + [0.06, 0.01, 0.00, 0.05, 0.11, 0.09, 0.08, 0.13], // November + [0.07, 0.01, 0.01, 0.03, 0.08, 0.09, 0.09, 0.18]];// December + }; if (worldName in ["sfp_wamako"]) exitWith { @@ -123,6 +176,23 @@ if (worldName in ["Bornholm"]) exitWith { GVAR(TempNight) = [-1.6, -2.1, -0.7, 1.7, 6.2, 10.7, 13, 13.1, 10.6, 7.2, 3.5, 0.1]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,allinge,Denmark GVAR(Humidity) = [85, 84, 80, 76, 69, 69, 76, 77, 79, 81, 86, 86]; + + // Source: https://weatherspark.com/averages/28830/R-nne-Capital-Region-of-Denmark + GVAR(WindSpeedMax) = [[9.3, 2.2], [8.4, 2.2], [7.9, 2.2], [7.1, 2.1], [7.2, 2.1], [6.8, 2.0], [6.8, 2.0], [7.1, 2.1], [7.7, 2.2], [8.6, 2.2], [8.8, 2.2], [9.3, 2.2]]; + GVAR(WindSpeedMean) = [6.9, 6.0, 5.7, 4.9, 4.8, 4.6, 4.7, 4.9, 5.5, 6.2, 6.5, 6.7]; + GVAR(WindSpeedMin) = [[3.9, 2.0], [3.0, 2.0], [2.3, 2.0], [1.8, 1.8], [1.7, 1.8], [1.7, 1.7], [1.7, 1.8], [1.9, 1.9], [2.6, 2.0], [2.9, 2.0], [3.3, 2.1], [3.5, 2.0]]; + GVAR(WindDirectionProbabilities) = [[0.07, 0.04, 0.07, 0.05, 0.09, 0.12, 0.20, 0.07], // January + [0.08, 0.06, 0.10, 0.06, 0.06, 0.08, 0.20, 0.08], // February + [0.05, 0.06, 0.13, 0.08, 0.07, 0.08, 0.19, 0.06], // March + [0.05, 0.11, 0.16, 0.09, 0.05, 0.06, 0.17, 0.06], // April + [0.04, 0.10, 0.15, 0.08, 0.05, 0.06, 0.20, 0.05], // May + [0.03, 0.07, 0.10, 0.07, 0.05, 0.07, 0.28, 0.06], // June + [0.04, 0.06, 0.11, 0.07, 0.04, 0.07, 0.28, 0.06], // July + [0.05, 0.06, 0.11, 0.07, 0.06, 0.08, 0.26, 0.06], // August + [0.06, 0.06, 0.11, 0.07, 0.06, 0.09, 0.21, 0.06], // September + [0.07, 0.05, 0.09, 0.08, 0.08, 0.12, 0.18, 0.07], // October + [0.08, 0.06, 0.08, 0.07, 0.10, 0.12, 0.16, 0.07], // November + [0.08, 0.05, 0.06, 0.04, 0.10, 0.14, 0.19, 0.07]];// December }; if (worldName in ["Imrali"]) exitWith { // Source: http://www.iten-online.ch/klima/europa/tuerkei/bursa.htm @@ -131,6 +201,30 @@ if (worldName in ["Imrali"]) exitWith { // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Bursa,Turkey GVAR(Humidity) = [78, 75, 70, 70, 71, 61, 58, 59, 63, 69, 77, 76]; }; +if (worldName in ["Kunduz"]) exitWith { + // Source: http://www.iten-online.ch/klima/asien/afghanistan/kunduz.htm + GVAR(TempDay) = [6.3, 9.5, 15.8, 23, 29.8, 37.3, 39, 36.9, 31.8, 24.5, 16, 9.7]; + GVAR(TempNight) = [-2.4, 0, 5.7, 11.6, 15.7, 20.9, 21.5, 21.5, 16.3, 10.6, 4.1, 0]; + // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Kabul,Afghanistan + GVAR(Humidity) = [70, 72, 64, 61, 49, 34, 36, 38, 39, 52, 51, 63]; + + // Source: https://weatherspark.com/averages/32753/Kunduz-Afghanistan + GVAR(WindSpeedMax) = [[3.5, 0.8], [4.0, 0.6], [4.3, 2.0], [4.6, 1.1], [5.1, 1.2], [5.7, 1.0], [4.9, 0.8], [4.5, 0.3], [4.3, 0.3], [3.8, 0.5], [3.0, 1.3], [3.1, 0.8]]; + GVAR(WindSpeedMean) = [1.5, 1.8, 2.1, 2.4, 2.5, 2.8, 2.7, 2.5, 2.3, 2.1, 1.7, 1.6]; + GVAR(WindSpeedMin) = [[0.2, 0.1], [0.3, 0.3], [0.4, 0.1], [0.8, 0.2], [0.8, 0.1], [1.0, 0.3], [0.9, 0.5], [0.8, 0.2], [0.8, 0.1], [0.7, 0.1], [0.5, 0.1], [0.2, 0.2]]; + GVAR(WindDirectionProbabilities) = [[0.04, 0.02, 0.05, 0.11, 0.12, 0.06, 0.09, 0.06], // January + [0.04, 0.02, 0.05, 0.11, 0.12, 0.06, 0.08, 0.07], // February + [0.05, 0.04, 0.06, 0.14, 0.12, 0.06, 0.10, 0.08], // March + [0.09, 0.05, 0.08, 0.13, 0.07, 0.05, 0.07, 0.07], // April + [0.14, 0.07, 0.13, 0.13, 0.06, 0.05, 0.05, 0.08], // May + [0.16, 0.06, 0.12, 0.12, 0.05, 0.04, 0.05, 0.10], // June + [0.17, 0.06, 0.08, 0.12, 0.06, 0.04, 0.05, 0.12], // July + [0.15, 0.05, 0.06, 0.16, 0.08, 0.05, 0.07, 0.13], // August + [0.15, 0.04, 0.08, 0.20, 0.13, 0.05, 0.10, 0.14], // September + [0.08, 0.02, 0.08, 0.22, 0.15, 0.06, 0.13, 0.13], // October + [0.06, 0.02, 0.05, 0.20, 0.17, 0.06, 0.12, 0.10], // November + [0.04, 0.02, 0.05, 0.14, 0.19, 0.07, 0.10, 0.07]];// December +}; // Assume default values GVAR(TempDay) = [1, 3, 9, 14, 19, 23, 25, 24, 21, 13, 7, 2]; diff --git a/addons/weather/functions/fnc_updateHumidity.sqf b/addons/weather/functions/fnc_updateHumidity.sqf index dce031b3f3..df6e64df5d 100644 --- a/addons/weather/functions/fnc_updateHumidity.sqf +++ b/addons/weather/functions/fnc_updateHumidity.sqf @@ -14,7 +14,7 @@ private ["_month", "_avgTemperature", "_pS1", "_pS2"]; _month = date select 1; -GVAR(currentHumidity) = (GVAR(Humidity) select _month) / 100; +GVAR(currentHumidity) = (GVAR(Humidity) select (_month - 1)) / 100; if (rain > 0 && overcast > 0.7) then { GVAR(currentHumidity) = 1; diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf index 870d00333c..82f126e33f 100644 --- a/addons/weather/functions/fnc_updateTemperature.sqf +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -11,13 +11,13 @@ */ #include "script_component.hpp" -private ["_time", "_month", "_hourlyCoef"]; +private ["_time", "_month", "_timeRatio"]; _time = daytime; _month = date select 1; -_hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440)); +_timeRatio = abs(_time - 12) / 12; -GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef; +GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _timeRatio) + (GVAR(TempNight) select (_month - 1)) * _timeRatio; GVAR(currentTemperature) = GVAR(currentTemperature) + GVAR(temperatureShift) - GVAR(badWeatherShift) * overcast; GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10; diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index 06bb57d093..b362458fdb 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -13,11 +13,16 @@ if (!GVAR(syncWind)) exitWith { ACE_wind = wind }; +private ["_newWaves"]; + ACE_wind = [] call FUNC(getWind); setWind [ACE_wind select 0, ACE_wind select 1, true]; 2 setGusts 0; // Set waves: 0 when no wind, 1 when wind >= 16 m/s -1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0); +_newWaves = ((vectorMagnitude ACE_wind) / 16.0) min 1.0; +if (abs(_newWaves - waves) > 0.1) then { + 1 setWaves _newWaves; +}; TRACE_3("Wind/ACE_wind/Deviation(m/s)",wind,ACE_wind,Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000); diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 4e0723bb7a..2008fc7bc1 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -9,6 +9,9 @@ Mostrar información del viento Mostra informazioni sul vento Zeige Windinformationen + Széladatok mutatása + Zobrazit informace o větru + Mostrar informação do vento - + \ No newline at end of file diff --git a/addons/winddeflection/$PBOPREFIX$ b/addons/winddeflection/$PBOPREFIX$ new file mode 100644 index 0000000000..e36be56aec --- /dev/null +++ b/addons/winddeflection/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\winddeflection \ No newline at end of file diff --git a/addons/winddeflection/config.cpp b/addons/winddeflection/config.cpp index e0c77420cf..e420debb66 100644 --- a/addons/winddeflection/config.cpp +++ b/addons/winddeflection/config.cpp @@ -7,9 +7,9 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_weather"}; versionDesc = "ACE Wind Deflection"; - version = VERSION; author[] = {$STR_ACE_Common_ACETeam, "Glowbal", "Ruthberg"}; authorUrl = "http://csemod.com"; + VERSION_CONFIG; }; }; diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index bd34204147..4ebcc81bee 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -12,6 +12,7 @@ Windinformationen Szélinformáció Informazioni sul vento + Informação do vento Direction: %1 @@ -22,7 +23,8 @@ Direction %1 Windrichtung: %1 Irány: %1 - Direzione: %1 + Direzione: %1° + Direção: %1 Speed: %1 m/s @@ -34,6 +36,7 @@ Geschwindigkeit: %1 m/s Sebesség: %1 m/s Velocità: %1 m/s + Velocidade: %1 m/s Weather Information @@ -45,6 +48,7 @@ Wetterinformationen Időjárás-Információ Meteo + Informação Meteorológica Humidity: %1% @@ -56,6 +60,7 @@ Luftfeuchtigkeit: %1 Páratartalom: %1% Umidità: %1% + Humidade: %1% diff --git a/documentation/README_PL.md b/documentation/README_PL.md new file mode 100644 index 0000000000..d156185908 --- /dev/null +++ b/documentation/README_PL.md @@ -0,0 +1,84 @@ +

+ +

+

+ + ACE version + + + ACE download + + + ACE issues + + + BIF thread + + + ACE license + +

+

Wymaga najnowszej wersji CBA A3. Odwiedź nas na Facebook | YouTube | Twitter | Reddit

+ + +**ACE3** to efekt wspólnego wysiłku grup moderów odpowiedzialnych za **ACE2**, **AGM** oraz **CSE** w celu zwiększenia realizmu i autentyczności Arma 3. + +Projekt ten jest całkowicie **otwarty źródłowo** i wszelki wkład w rozwój jest mile widziany. Możesz bez przeszkód prowadzić swoją własną dostosowaną wersję, o ile zmiany jakie wprowadzisz będą otwarte dla publiki zgodnie z GNU General Public License ([GPLv2](https://github.com/acemod/ACE3/blob/master/LICENSE)). + +Modyfikacja ta jest **budowana modułowo**, dzięki temu prawie każdy dostarczony plik PBO może zostać łatwo usunięty z konfiguracji. Dzięki temu, grupa może prowadzić własną, dostosowaną do siebie, wersję ACE wyłączając elementy, których nie potrzebują, lub które po prostu nie działają z innymi addonami. Moduły same w sobie np. system medyczny, posiadają wiele możliwości konfiguracji, pozwalając mission designerom dostosować ogólne doświadczenie z gry. + +### Główne cechy +* Całkowicie nowy system akcji/interakcji 3D +* Wydajna i niezawodna struktura +* Skupienie na modułowości i customizacji +* Elastyczny system ustawień i konfiguracji opcji u klienta i serwera +* Ulepszony system medyczny z różnymi stopniami zaawansowania (podstawowy/rozszerzony) skupiony na grywalności i realizmowi +* Prawidłowa i spójna synchronizowana pogoda +* Balistyka oparta na warunkach pogodowych i wietrze +* Możliwość brania jeńców +* Rozszerzony system ładunków wybuchowych, włączając w to użycie różnego rodzaju zapalników +* Ulepszenia mapy - stawianie markerów i przybory mapy +* Zaawansowane naprowadzanie rakiet i wskazywanie laserem + +#### Dodatkowe cechy +* Przeciąganie i przenoszenie +* Realistyczne nazwy pojazdów i broni +* System kontroli ognia (SKO) dla pojazdów opancerzonych oraz śmigłowców +* Realistyczna balistyka/SKO obliczana w rozszerzeniach C/C++ +* Symulacja strefy backblastu i podciśnienia +* Jednorazowe wyrzutnie +* Realistyczne siły G +* Zamykanie pojazdów na kluczyk +* Realistyczne tryby termowizji oraz noktowizji +* Przepakowywanie magazynków +* Realistyczna mechanika przegrzewania broni +* Symulacja głuchoty bitewnej (tymczasowej utraty słuchu) +* Ulepszona fizyka ragdoll +* Ulepszona interakcja dla asystentów i amunicyjnych +* Regulowane celowniki snajperskie +* Usunięte animacje bezczynności z opuszczoną bronią +* Usunięte głosy awatara gracza +* Skakanie przez przeszkody, wspinanie się na ściany i przecinanie płotów +* Urządzenia Vector, MicroDAGR, Kestrel
+***i wiele wiele więcej...*** + +### Poradniki i instrukcje +Jeżeli zainstalowałeś ACE3 lecz masz problem ze zrozumieniem jak to wszystko działa, lub gdzie zacząć, zacznij od przeczytania tego: +* [Wprowadzenie](http://ace3mod.com/wiki/user/getting-started.html) + +#### Współpraca +Możesz pomóc w rozwoju addonu szukając potencjalnych bugów w naszym kodzie, lub zgłaszając nowe funkcje. Aby wnieść swój wkład do ACE, po prostu zforkuj to repozytorium na swoje konto GitHub i zgłoś swoje pull requesty do przeglądu przez innych współpracowników. Pamiętaj, aby dodać siebie do listy autorów każdego PBO jakie edytujesz oraz do pliku ['AUTHORS.txt'](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) dodając także swój adres e-mail. + +Używaj naszego [Issue Tracker-a](https://github.com/acemod/ACE3/issues) aby zgłaszać bugi, proponować nowe funkcje lub sugerować zmiany do aktualnie istniejących. Zobacz także: +* [Jak zgłosić bug-a](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) +* [Jak zgłosić feature request-a](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html) + +#### Testowanie i budowanie +Aby pomóc nam w testowaniu najnowszych zmian rozwojowych, pobierz nasz master branch ([bezpośrednio](https://github.com/acemod/ACE3/archive/master.zip), lub [korzystając z git](https://help.github.com/articles/fetching-a-remote/)), a następnie złóż testowego build-a: +* [Konfiguracja środowiska do testów](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) – intrukcja krok-po-kroku jak poprawnie ustawić i zbudować wersję ACE do celów testowych. \ No newline at end of file diff --git a/documentation/development/ace3-config-entries.md b/documentation/development/ace3-config-entries.md index 78f8022856..fcd85ccfe1 100644 --- a/documentation/development/ace3-config-entries.md +++ b/documentation/development/ace3-config-entries.md @@ -6,7 +6,9 @@ parent: wiki order: 2 --- -### CfgVehicles +## 1. CfgVehicles +Entries found in the `CfgVehicles.hpp` files + ```c++ ace_nightvision_grain @@ -23,7 +25,9 @@ ace_offset ``` -### CfgWeapons +## 2. CfgWeapons +Entries found in the `CfgWeapons.hpp` files + ```c++ ace_recoil_shakemultiplier @@ -54,10 +58,14 @@ ace_detonator ace_barrelTwist ace_twistDirection ace_barrelLength +ace_laserpointer +ace_nextmodeclass +ace_modedescription ``` -### CfgAmmo +## 3. CfgAmmo +Entries found in the `CfgAmmo.hpp` files ```c++ ace_recoil_shakemultiplier @@ -85,7 +93,8 @@ ace_barrellengths ``` -### CfgGlasses +## 4. CfgGlasses +Entries found in the `CfgGlasses.hpp` file ```c++ ace_color @@ -99,7 +108,8 @@ ace_dustpath ``` -### CfgMagazines +## 5. CfgMagazines +Entries found in the `CfgMagazines.hpp` files ```c++ ace_isbelt diff --git a/documentation/development/ace3-events-system.md b/documentation/development/ace3-events-system.md index 33412aa8fa..393005bdf4 100644 --- a/documentation/development/ace3-events-system.md +++ b/documentation/development/ace3-events-system.md @@ -6,7 +6,7 @@ parent: wiki order: 3 --- -## Event Handlers +## 1. Event Handlers Event handlers in ACE3 are implemented through our event system. They should be used to trigger or allow triggering of specific functionality. @@ -23,12 +23,14 @@ Events can be removed or cleared with the following commands. * `[eventName, eventHandlerId] call ace_common_fnc_removeEventHandler`
will remove a specific event handler of the event name, using the ID returned from `ace_common_fnc_addEventHandler`. * `[eventName] call ace_common_fnc_removeAllEventHandlers`
will remove all event handlers for that type of event. -### Synchronized Events +### 1.1 Synchronized Events + * `[eventName, eventCodeBlock, ttlNumberOrCodeBlock] call ace_common_fnc_addSyncedEventHandler`
adds a globally synchronized event handler which will expire events after the provided TTL, or the code returns true. * `[eventName] call ace_common_fnc_removeSyncedEventHandler`
will remove a specific event handler of the event name, using the ID returned from `ace_common_fnc_addSyncedEventHandler`. * * `[eventName, args, ttlNumberOrCodeBlock] call ace_common_fnc_syncedEvent`
calls a global synchronized event, which will also be run on JIP players unless it has expired; event will expire after the provided TTL, or the code returns true. -### Pattern: +### 1.2 Pattern: + ```c++ // tapper machine ["tapShoulder", [_target], [otherArguments]] call EFUNC(common,targetEvent); @@ -38,7 +40,8 @@ PREP(onTapShoulder); ["tapShoulder", FUNC(onTapShoulder) ] call EFUNC(common,addEventHandler); ``` -### Listenable Event List: +### 1.3 Listenable Event List: + @@ -191,7 +194,8 @@ PREP(onTapShoulder);
-### Callable Event List: +### 1.4 Callable Event List: + diff --git a/documentation/development/arma-3-issues.md b/documentation/development/arma-3-issues.md index 3b4a6f036b..79f0336e9b 100644 --- a/documentation/development/arma-3-issues.md +++ b/documentation/development/arma-3-issues.md @@ -20,6 +20,7 @@ Keeping track of Arma 3 issues that need to be fixed. If you want to support us * [CorruptedHeart: 0022318: Can no longer use "MenuBack" shortcut in AddAction](http://feedback.arma3.com/view.php?id=22318) * [James2464: 0023725: All Environment Rocks Should Have PhysX LODs](http://feedback.arma3.com/view.php?id=23725) * [Jaynus: 0023679: Display event handler return values for mouse buttons should be respected](http://feedback.arma3.com/view.php?id=23679) +* [Heisenberg: 0023741: Switching between optic modes of a sniper scope (AMS, DMS, MOS) will result in a blurred vision](http://feedback.arma3.com/view.php?id=23741) **Resolved:** diff --git a/documentation/development/arma-3-scheduler-and-our-practices.md b/documentation/development/arma-3-scheduler-and-our-practices.md index bef0224819..95852792d8 100644 --- a/documentation/development/arma-3-scheduler-and-our-practices.md +++ b/documentation/development/arma-3-scheduler-and-our-practices.md @@ -6,25 +6,27 @@ parent: wiki order: 8 --- -## Terminology +## 1. Terminology -#### Frame +### 1.1 Frame A single rendered frame of Arma 3. -#### Scheduled Space +### 1.2 Scheduled Space This refers to execution would is ruled by the Arma 3 default script scheduling engine. This would include: + * spawn * execVM -#### Unscheduled Space +### 1.3 Unscheduled Space This refers to execution which is linear; what this means is that the code will run to completion prior to executing the current frame. It must complete, but is guaranteed to run within a given frame. + * perFrameHandler * Extended_EventHandlers * addEventHandler -## What is the scheduler and why do I care? +## 2. What is the scheduler and why do I care? BIKI Article: https://community.bistudio.com/wiki/Biki2.0:Performance_Considerations @@ -36,18 +38,17 @@ What does this all mean? It means we need to live outside of the spawn execution The scheduler will also actually halt your script mid-execution, usually at the end of a given control block, and pause you to yield to other scripts. This can lead to drastically incorrect results when performing calculations. Again, this is the reason we want all our given code to run to completion in a single given frame. -## Design Patterns +## 3 Design Patterns Because we are attempting to always run to completion; execution occurs from 2 places. Either PFH handles or event handlers; in both cases, we wish our code to run to completion. This takes a change in mind set for design to ensure your executing that way. In a nutshell though, this all distills down to the fact that you will always call other chunks of code; nothing will ever be spawned off. The only circumstance this really becomes a problem is for waiting or delay. If designed correctly, though, you can avoid those circumstances. Rules of thumb for component design: * If you need to wait for a value, don't wait, use a CBA event! This means everything should be designed and written with an event-driven model in mind. - * If you have to wait, use a PFH delay/diag_tickTime check. -### PFH-Design Pattern +### 3.1 PFH-Design Pattern Line Notes: @@ -55,17 +56,17 @@ Line Notes: -### ACE3 General Rules +### 3.2 ACE3 General Rules * Always use call whenever possible. We should be calling functions chains exclusive and not be relying on spawn/execVM ever. Consider spawn/execVM banned without good reason. All code should be a chain of execution which is traceable, and not triggered between seperate threads. -* waitUntil and sleep are banned. If you need to use them, use scheduled delay execution instead. **Reasoning** *Sleep/waituntil surrender about 5x the scheduler time than even normal execution does. * +* waitUntil and sleep are banned. If you need to use them, use scheduled delay execution instead. **Reasoning: Sleep/waitUntil surrender about 5x the scheduler time than even normal execution does.** * If we need a spawn or exec, we should utilize the perFrame scheduler. Spawn/execVM are subject to the Arma 3 scheduler and as such, cannot be relied upon. In order to give our players a consistent gameplay experience, we need to have total control over how and when all of our code runs. * PFH should be utilized at all possible times when the player can see the result of whatever the code is. This applies to missile guidance, bullets, wind, optics, interactive UI, HUD's, and rendering. We should only consider scheduled execution if the code is running out of the visual range of the player. -### Code Examples +### 3.3 Code Examples -##### Generic PFH functions +#### 3.3.1 Generic PFH functions See: https://dev.withsix.com/docs/cba/files/common/fnc_addPerFrameHandler-sqf.html for more details. ```c++ @@ -73,7 +74,7 @@ See: https://dev.withsix.com/docs/cba/files/common/fnc_addPerFrameHandler-sqf.ht ``` -##### PFH Wait +#### 3.3.2 PFH Wait ```c++ DFUNC(myDelayedFunction) = { diff --git a/documentation/development/coding-guidelines.md b/documentation/development/coding-guidelines.md index e39581a9d4..d2ae7b8d28 100644 --- a/documentation/development/coding-guidelines.md +++ b/documentation/development/coding-guidelines.md @@ -6,17 +6,8 @@ parent: wiki order: 1 --- -## Table Of Contents -- [Indentation](#indentation) -- [Braces](#braces) -- [Modules](#how-to-create-a-new-module) -- [Macros](#macro-usage) -- [Events](#event-handlers) -- [Hashes](#hashes) - - -## Indentation +## 1. Indentation 4 spaces for indentation. @@ -28,12 +19,12 @@ class Something: Or { }; ``` -#### Reasoning +### 1.1 Reasoning Tabs can be tricky sometimes, especially when it comes to sharing code with others. Additionally, a lot of people tend to forget they're using tabs when they're aligning things after the first character, which causes things to fall apart when viewing the code at different tab lengths. -## Braces +## 2. Braces - opening brace on the same line as keyword - closing brace in own line, same level of indentation as keyword @@ -88,12 +79,12 @@ class Two {foo = 2;}; class Three {foo = 3;}; ``` -#### Reasoning +### 2.1 Reasoning Putting the opening brace in it's own line wastes a lot of space, and keeping the closing brace on the same level as the keyword makes it easier to recognize what exactly the brace closes. -## How to create a new module +## 3. How to create a new module 1. Copy the structure from `extras\blank` to the `addons\` folder and name it what you wish the new module to be named. 1. Edit `script_component.hpp`, change the `COMPONENT` definition to the name of the module. Also edit each of the `DEBUG` definitions to be the name of the module (for example, `DEBUG_SETTINGS_BLANK` should be `DEBUG_SETTINGS_BALLS` for module balls) @@ -101,7 +92,7 @@ Putting the opening brace in it's own line wastes a lot of space, and keeping th 1. The module is now prepared for development -### Function Definitions +### 3.1 Function Definitions Functions should be created in the functions\ subdirectory, named `fnc_FunctionName.sqf` They should then be indexed via the `PREP(FunctionName)` macro in the XEH_preInit.sqf file. The `PREP` macro allows for CBA function caching, which drastically speeds up load times. **Beware though that function caching is enabled by default and as such to disable it you need to `#define DISABLE_COMPILE_CACHE` above your `#include "script_components.hpp"` include!** @@ -127,10 +118,10 @@ Every function should have a header of the following format: ``` -## Macro Usage +## 4. Macro Usage -### Module/PBO specific Macro Usage -The family of `GVAR` macro's define global variable strings or constants for use within a module. Please use these to make sure we follow naming conventions across all modules and also prevent duplicate/overwriting between variables in different modules. The macro family expands as follows, for the example of the module 'balls' +### 4.1 Module/PBO specific Macro Usage +The family of `GVAR` macro's define global variable strings or constants for use within a module. Please use these to make sure we follow naming conventions across all modules and also prevent duplicate/overwriting between variables in different modules. The macro family expands as follows, for the example of the module 'balls': * `GVAR(face)` is `ace_balls_face` * `QGVAR(face)` is `"ace_balls_face"` @@ -139,7 +130,8 @@ The family of `GVAR` macro's define global variable strings or constants for use * `QEGVAR(leg,face)` is `"ace_leg_face"` -There also exists the FUNC family of Macros +There also exists the FUNC family of Macros: + * `FUNC(face)` is `ace_balls_fnc_face` or the call trace wrapper for that function. * `EFUNC(balls,face)` is `ace_balls_fnc_face` or the call trace wrapper for that function. * `EFUNC(leg,face)` is `ace_leg_fnc_face` or the call trace wrapper for that function. @@ -152,7 +144,7 @@ The `FUNC` and `EFUNC` macros should NOT be used inside `QUOTE` macros if the in Using `FUNC` or `EFUNC` inside a `QUOTE` macro is fine if the intention is for it to be executed as a function. -#### FUNC Macros, Call Tracing, and Non-ACE/Anonymous Functions +#### 4.1.1 FUNC Macros, Call Tracing, and Non-ACE/Anonymous Functions ACE implements a basic call tracing system that can dump the call stack on errors or wherever you want. To do this the `FUNC` macros in debug mode will expand out to include metadata about the call including line numbers and files. This functionality is automatic with the use of calls via `FUNC` and `EFUNC`, but any calls to other functions need to use the following macros: @@ -161,13 +153,13 @@ ACE implements a basic call tracing system that can dump the call stack on error These macros will call these functions with the appropriate wrappers and enable call logging into them (but to no further calls inside obviously). -### General Purpose Macros +### 4.2 General Purpose Macros [CBA script_macros_common.hpp](https://gist.github.com/commy2/9ed6cc73fbe6a2b3f4e1) * `QUOTE()` is utilized within configuration files for bypassing the quote issues in configuration macros. So, all code segments inside a given config should utilize wrapping in the QUOTE() macro instead of direct strings. This allows us to use our macros inside the string segments, such as `QUOTE(_this call FUNC(balls))` -#### setVariable, getVariable family macros +#### 4.2.1 setVariable, getVariable family macros * `GETVAR(player,MyVarName,false)` `player getVariable ["MyVarName", false]` @@ -185,7 +177,7 @@ These macros will call these functions with the appropriate wrappers and enable `uiNamespace setVariable ["MyVarName", _control]` -## Event Handlers +## 5. Event Handlers Event handlers in ACE are implemented through our event system. They should be used to trigger or allow triggering of specific functionality. @@ -204,7 +196,7 @@ Events can be removed or cleared with the following commands. More information on the [ACE Events System](https://github.com/KoffeinFlummi/ACE3/wiki/ACE-Events-System) page. -## Hashes +## 6. Hashes Hashes are a variable type that store key value pairs. They are not implemented natively in SQF, so there are a number of macros and functions for their usage in ACE. If you are unfamiliar with the idea, they are similar in function to `setVariable`/`getVariable` but do not require an object to use. @@ -230,7 +222,7 @@ A description of the above macros is below. * `HASH_HASKEY(hash, key)` will return true/false if that key exists in the hash. * `HASH_REM(hash, key)` will remove that hash key. -### Hashlists +### 6.1 Hashlists A hashlist is an extension of a hash. It is a list of hashes! The reason for having this special type of storage container rather than using a normal array is that an array of normal hashes that are are similar will duplicate a large amount of data in their storage of keys. A hashlist on the other hand uses a common list of keys and an array of unique value containers. The following will demonstrate it's usage. @@ -269,6 +261,6 @@ As you can see above working with hashlists are fairly simple, a more in depth e * `HASHLIST_SELECT(hashlist, index)` returns the hash at that index in the list. * `HASHLIST_SET(hashlist, index, hash)` sets a specific index to that hash. -#### A note on pass by reference and hashes +#### 6.1.1 A note on pass by reference and hashes Hashes and hashlists are implemented with SQF arrays, and as such they are passed by reference to other functions. Remember to make copies (using the + operator) if you intend for the hash or hashlist to be modified with out the need for changing the original value. diff --git a/documentation/development/extension-guidelines.md b/documentation/development/extension-guidelines.md index b5e7e98586..45aa8c5994 100644 --- a/documentation/development/extension-guidelines.md +++ b/documentation/development/extension-guidelines.md @@ -6,27 +6,27 @@ parent: wiki order: 9 --- -## Basics +## 1. Basics -### Requirements +### 1.1 Requirements - A compiler (VS/GCC/Clang) - If starting with Visual Studio, you need to make sure to use the Visual studio command prompt - cmake 3.0 or later in your path -### Cross-Platform Guidelines +### 1.2 Cross-Platform Guidelines -### C++ basic style and naming guide +### 1.3 C++ basic style and naming guide -### ace_common cpp library +### 1.4 ace_common cpp library --- -## Building Extensions on Windows +## 2 Building Extensions on Windows -### Compiling +### 2.1 Compiling -#### Windows - Creating a Visual Studio Project +#### 2.1.1 Windows - Creating a Visual Studio Project 1. Open your compiling command prompt (which has cmake and your compiler) 2. From this directory, you need to use cmake to build the appropriate build files. Change the -G property appropriately. run cmake --help to get a list of the options. @@ -37,7 +37,7 @@ cmake .. -G "Visual Studio 2014" A Visual studio project file will now be generated in your build directory. -#### Windows - Visual Studio - Compile only (nmake) +#### 2.1.2 Windows - Visual Studio - Compile only (nmake) 1. Open your compiling command prompt (which has cmake and your compiler) 2. From this directory, you need to use cmake to build the appropriate build files. Change the -G property appropriately. run cmake --help to get a list of the options. @@ -56,4 +56,4 @@ extensions\ somethingElse\ace_somethingElse.dll ``` -### Creating a New Extension +### 2.2 Creating a New Extension diff --git a/documentation/development/how-to-translate-ace3.md b/documentation/development/how-to-translate-ace3.md index b7e23fa575..576cd3a98b 100644 --- a/documentation/development/how-to-translate-ace3.md +++ b/documentation/development/how-to-translate-ace3.md @@ -24,3 +24,7 @@ This page describes in short how you can help translating ACE3 into your languag (The last three steps require some git knowledge, but there are a lot of tutorials out there) [GitHub for Windows help](https://windows.github.com/help.html) + + +#### Community Translation Guides +**Spanish:** [https://gist.github.com/Legolasindar/bf8a3b09cb835f72501f](https://gist.github.com/Legolasindar/bf8a3b09cb835f72501f) diff --git a/documentation/development/setting-up-the-development-environment.md b/documentation/development/setting-up-the-development-environment.md index fe76ca6a20..f484c59722 100644 --- a/documentation/development/setting-up-the-development-environment.md +++ b/documentation/development/setting-up-the-development-environment.md @@ -9,48 +9,36 @@ order: 0 This page describes how you can setup your development environment for ACE3, allowing you to properly build ACE and utilize file patching. -## Table Of Contents -- [Requirements](#requirements) -- [Why so complicated?](#why-so-complicated) -- [Getting ACE](#getting-ace) -- [Initial Setup](#initial-setup) - - [Manual Setup](#manual-setup) -- [Creating a Test Build](#creating-a-test-build) -- [Creating a Release Build](#creating-a-release-build) -- [File Patching](#file-patching) - - [Enabling File Patching](#enabling-file-patching) - - [Restrictions of File Patching](#restrictions-of-file-patching) - - -## Requirements +## 1. Requirements - Arma 3 (duh) - A proper installation of the Arma 3 Tools (available on Steam) - A properly setup P-drive +- Run ArmA 3 and Arma 3 Tools directly from steam once to install registry entries (and again after every update) - Python 3.x, available [here](http://www.python.org) - The following Mikero Tools (available [here](https://dev.withsix.com/projects/mikero-pbodll/files)): DePBO, Rapify, MakePBO, PBOProject - A properly setup PATH variable (containing Python and the Mikero tools) -## Why so complicated? +## 2. Why so complicated? If you have contributed to AGM you might be used to an easier build process, where there was even an .exe you could use for building. ACE3, however, makes use of CBA macros to simplify things and give the developer access to a better debug process, which requires a stricter build environment. Additionally, Mikero's tools are stricter and report more errors than AddonBuilder does. The structure of this development environment also allows for [file patching](#file-patching), which is very useful for debugging. Not offering .exes for the Python scripts we use allows us to make easy changes without the hassle of compiling self-extracting exes all the time. -## Getting ACE +## 3. Getting ACE To actually get the ACE source code on your machine, it is recommended that you use Git. Tutorials for this are all around the web, and it allows you to track your changes and easily update your local copy. If you just want to create a quick and dirty build, you can also directly download the source code using the "Download ZIP" button on the front page of the GitHub repo. -## Initial Setup +## 4. Initial Setup After ensuring that you have installed all requirements, execute the `setup.py` script found in the `tools` folder. This will do most of the heavy lifting for you, create the links you need and copy the required CBA code to the proper place. Please note that these links are tied to the location of your ACE3 source code, so make sure that the project folder is where you want it to be. We recommend that you store the ACE3 project on your P-drive. -#### Manual Setup +### 4.1 Manual Setup Should the script fail, here is how you create the required links manually: @@ -73,7 +61,7 @@ mklink /D "P:\z\ace" "[location of the ACE3 project]" Then, copy the `cba` folder from the `tools` folder to `P:\x\cba`. Create the `x` folder if needed. That folder contains the parts of the CBA source code that are required for the macros to work. -## Creating a Test Build +## 5. Creating a Test Build To create a development build of ACE to test changes or to debug something, run the `build.py` file in the `tools` folder. This will populate the `addons` folder with binarized PBOs. These PBOs still point to the source files in their respective folders however, which allows you to use [file patching](#file-patching). @@ -86,16 +74,16 @@ To start the game using this build, you can use the following modline: ``` -## Creating a Release Build +## 6. Creating a Release Build To create a complete build of ACE that you can use without the source files, run the `make.py` file in the `tools` folder. This will populate the `release` folder with binarized PBOs that you can redistribute. These handle like those of any other mod. -## File Patching +## 7. File Patching File Patching allows you to change the files in an addon while the game is running, requiring only a restart of the mission. This makes it great for debugging, as it cuts down the time required between tests. Note that this only works with PBOs created using MakePBO, as outlined in [Creating a Test Build](#creating-a-test-build). -#### Enabling File Patching +### 7.1 Enabling File Patching There are two ways to enable file patching: - Load cba_cache_disable.pbo (included in CBA's optional folder) @@ -113,10 +101,10 @@ class CfgSettings { }; ``` -#### Restrictions of File Patching +### 7.2 Restrictions of File Patching Files must exist in the built PBOs for filepatching to work. If you create a new file you must rebuild the PBO or Arma will not find it in your file paths. Configs are not patched during run time, only at load time. You do not have have to rebuild a PBO to make config changes, just restart Arma. You can get around this though if you are on the dev branch of Arma 3 and running the diagnostic exe. That includes `diag_mergeConfig` which takes a full system path (as in `p:\z\ace\addons\my_module\config.cpp`) and allows you selectivly reload config files. -If you need to add/remove files* Then you'll need to run build.bat again without the game running, and restart. That is all that is required to add new files to then further use in testing. +If you need to add/remove files, then you'll need to run build.py again without the game running, and restart. That is all that is required to add new files to then further use in testing. diff --git a/documentation/feature/advanced_ballistics.md b/documentation/feature/advanced_ballistics.md new file mode 100644 index 0000000000..fd44bb21b9 --- /dev/null +++ b/documentation/feature/advanced_ballistics.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Advanced Ballistics +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/ai.md b/documentation/feature/ai.md new file mode 100644 index 0000000000..b82192b920 --- /dev/null +++ b/documentation/feature/ai.md @@ -0,0 +1,27 @@ +--- +layout: wiki +title: AI (Artifical Intelligence) +group: feature +order: 5 +parent: wiki +--- + +# Overview +## Adjusted AI skill values +The idea here is to reduce the AI's godlike aiming capabilties while retaining it's high intelligence. The AI should be smart enough to move through a town, but also be 'human' in their reaction time and aim. +Note: All these values can still be adjusted via scripts, these arrays just change what 0 & 1 are for setSkill. +## Firing in burst mode +AIs will now use the automatic mode of their weapons on short distances, instead of always relying on firing single shots in quick succession. +## Longer engagement ranges +The maximum engagement ranges are increased: AI will fire in bursts with variable length on high ranges of 500 - 700 meters, depending on their weapon and optic. +## No deadzones in CQB +Some weapons had minimum engagement ranges. If you were as close as 2 meters to an AAF soldier, he wouldn't open fire, because the AI couldn't find any valid fire mode for their weapon. AGM removes this behaviour mostly notable in CQB by adding a valid firing mode. +## No scripting +All changes of AGM AI are config based to ensure full compatibility with advanced AI modifications like ASR AI. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/aircraft.md b/documentation/feature/aircraft.md new file mode 100644 index 0000000000..6b99540466 --- /dev/null +++ b/documentation/feature/aircraft.md @@ -0,0 +1,25 @@ +--- +layout: wiki +title: Aircraft +group: feature +order: 5 +parent: wiki +--- +# Overview +## Adjusted flight behaviour +Changes the flight behaviour of various aircraft. +## Various adjustments to A2A, A2G and G2A munitions +- needs documentaion - +## Missile lock warnings +Adds missile-lock warning systems to helicopters and planes based on the various real life capabilities. +## Semi-automatic flare mode +Adds the semi-automatic flare mode known from Arma 2. The key to switch the mode still exists in Arma 3's key settings, but is unused. +### Ejecting from pilot and copilot seats +Pilots and copilots of all helicopters can now eject. +## Laser marker for wildcat +Adds a laser marker to the copilot seat of the Wildcat. +## HUD for AH-9 +Adds a HUD to the AH-9 based on the comanches HUD. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/apl.md b/documentation/feature/apl.md new file mode 100644 index 0000000000..fe69507f32 --- /dev/null +++ b/documentation/feature/apl.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: APL +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/atragmx.md b/documentation/feature/atragmx.md new file mode 100644 index 0000000000..77affe1326 --- /dev/null +++ b/documentation/feature/atragmx.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: ATragMX +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/attach.md b/documentation/feature/attach.md new file mode 100644 index 0000000000..7bf2c400e6 --- /dev/null +++ b/documentation/feature/attach.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Attach +group: feature +parent: wiki +--- +# Overview +## Attach items to uniform +Enables player to attach IR grenades and chemlights to themselves. +## IR Strobe +Adds an attachable IR strobe, which is only visible using night vision devices and offers better visibility than IR grenades.re 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/backpacks.md b/documentation/feature/backpacks.md new file mode 100644 index 0000000000..ade414525f --- /dev/null +++ b/documentation/feature/backpacks.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Backpacks +group: feature +parent: wiki +--- +# Overview +## Lock backpack +Adds the ability to lock backpacks. Locked backpacks can't be accessed by others. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/ballistics.md b/documentation/feature/ballistics.md new file mode 100644 index 0000000000..895f1e37ab --- /dev/null +++ b/documentation/feature/ballistics.md @@ -0,0 +1,28 @@ +--- +layout: wiki +title: Ballistics +group: feature +parent: wiki +--- +# Overview +## Realistic rifle ammunition +Changes include adjusted muzzle velocity, air friction and dispersion based on real life values. +## Body armour nerf +Nerfs protection values of vests, CSAT uniforms and various campaign only gear to more realistic levels comparable to Arma 2 levels. +## Realistic silencers and sub-sonic ammunition +Silencers no longer decrease the muzzle velocity and are generally less effective when used with normal ammunition. They now only remove the muzzle blast and flash. To prevent the crack caused by super sonic projectiles, AGM introduces sub sonic ammunition. This is also fully compatible with AI. Sub sonic ammunition is available for the calibers 5.56mm, 6.5mm and 7.62mm. +## Armour piercing ammunition +Armour piercing rounds have higher penetration values against light armoured targets or other obstacles on the battlefield. Their drawback is a slighly decreased man-stopping power. AP rounds are available for the calibers 5.56mm, 6.5mm and 7.62mm. +## IR-Dim tracer ammunition +IR-Dim ammunition is similar to tracer rounds, but their tracers are only visible using night vision devices. +## M118 Long range ammunition +The M14 EBR now uses ammunition with decreased muzzle velocity and air friction to improve precission on long ranges. +## Flash suppressors +Flash suppressors are similar to sound suppressors and prevent the muzzle flash reducing visibilty without decreasing combat effectiveness. Flash suppressors are available for the calibers 5.56mm, 6.5mm, 7.62mm, .45 ACP and 9mm. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/captives.md b/documentation/feature/captives.md new file mode 100644 index 0000000000..305610cdce --- /dev/null +++ b/documentation/feature/captives.md @@ -0,0 +1,20 @@ +--- +layout: wiki +title: Captives +group: feature +parent: wiki +--- +# Overview +## Take captives +Introduces a captivity system for taking and moving prisoners. +## Load and unload captives into / from vehicles +- needs documentaion - +## Frisk captives +- needs documentaion - + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/difficulties.md b/documentation/feature/difficulties.md new file mode 100644 index 0000000000..626576ee09 --- /dev/null +++ b/documentation/feature/difficulties.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Difficulties +group: feature +parent: wiki +--- +# Overview +## Elite mode adjustments +Adjusts the default settings for the hardest difficulty to more closely resemble A2 settings. (No crosshair, stat screen, death messages...) + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/disarming.md b/documentation/feature/disarming.md new file mode 100644 index 0000000000..7b30494adc --- /dev/null +++ b/documentation/feature/disarming.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Disarming +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/disposable.md b/documentation/feature/disposable.md new file mode 100644 index 0000000000..dd634eb9c1 --- /dev/null +++ b/documentation/feature/disposable.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Disposable +group: feature +parent: wiki +--- +# Overview +## NLAW disposable anti tank weapon +Makes the NLAW disposable and provides the tools for other addons to do the same. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/dragging.md b/documentation/feature/dragging.md new file mode 100644 index 0000000000..28d5c6089f --- /dev/null +++ b/documentation/feature/dragging.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Dragging +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/explosives.md b/documentation/feature/explosives.md new file mode 100644 index 0000000000..78f09d62bb --- /dev/null +++ b/documentation/feature/explosives.md @@ -0,0 +1,20 @@ +--- +layout: wiki +title: Explosives +group: feature +parent: wiki +--- +# Overview +## Advanced explosives placement +Enables more precise placement of explosives. +## More trigger types +Offers different trigger types, like clackers and dead man switches. +## Attack explosives to vehicles +Enables attaching explosives to vehicles. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/fcs.md b/documentation/feature/fcs.md new file mode 100644 index 0000000000..4eefe05e5b --- /dev/null +++ b/documentation/feature/fcs.md @@ -0,0 +1,21 @@ +--- +layout: wiki +title: FCS (Fire Control System) +group: feature +parent: wiki +--- +# Overview +## Fire control system +Offers a custom fire control system for tanks and helicopters. It enables engaging stationary and moving targets. +## Manual lasing targets +Changes the default rangefinders, including those in vehicles, to require manual lasing. +## Air burst ammunition +Anti air cannons can now use airburst ammunition. It will explode on the FCS' zeroed in range. + +# Usage +To engage moving targets, place the crosshair on the enemy vehicle and press and hold tab. Follow the moving target with your crosshair for about 2 seconds and release tab. The optic will now be adjusted sideways to ensure a hit. + +To use manual lasing, place the crosshair on the object to range and press and hold tab. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/flashsuppressors.md b/documentation/feature/flashsuppressors.md new file mode 100644 index 0000000000..4217299857 --- /dev/null +++ b/documentation/feature/flashsuppressors.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Flash Suppressors +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/frag.md b/documentation/feature/frag.md new file mode 100644 index 0000000000..4d30c8d9f9 --- /dev/null +++ b/documentation/feature/frag.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Frag +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/gforces.md b/documentation/feature/gforces.md new file mode 100644 index 0000000000..73c3b321ed --- /dev/null +++ b/documentation/feature/gforces.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: G-Forces +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/goggles.md b/documentation/feature/goggles.md new file mode 100644 index 0000000000..1d77e342d4 --- /dev/null +++ b/documentation/feature/goggles.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Goggles +group: feature +parent: wiki +--- +# Overview +## Visual Effects for eyewear +Adds color tint to sunglasses and other eyewear. Causes raindrops to appear on +the screen in rain. Causes dirt to appear on the screen when dirt is kicked up +nearby (e.g. explsions, rotor wash, bullet impacts). + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/grenades.md b/documentation/feature/grenades.md new file mode 100644 index 0000000000..67918ae77b --- /dev/null +++ b/documentation/feature/grenades.md @@ -0,0 +1,20 @@ +--- +layout: wiki +title: Grenades +group: feature +parent: wiki +--- +# Overview +## Throw modes +Provides different modes for throwing grenades (high throw, precision throw and drop mode). +## Hand flares +Adds throwable hand flares in the colors white, red, green and yellow. Additionally buffs existing flares. +## M84 stun grenade +Adds stun grenade. This will also affect AI. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/hearing.md b/documentation/feature/hearing.md new file mode 100644 index 0000000000..32d4fce986 --- /dev/null +++ b/documentation/feature/hearing.md @@ -0,0 +1,19 @@ +--- +layout: wiki +title: Hearing +group: feature +parent: wiki +--- +# Overview +## Hearing damage simulation +Introduces hearing damage caused by nearby explosions and large-caliber weapons. +## Earplugs +Adds ear plugs to mitigate that effect. Soldiers with high caliber weapons or +missile launchers will be equipped with those, but remember to put them in. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/hitreactions.md b/documentation/feature/hitreactions.md new file mode 100644 index 0000000000..c109f10ddd --- /dev/null +++ b/documentation/feature/hitreactions.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Hit Reactions +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/interact_menu.md b/documentation/feature/interact_menu.md new file mode 100644 index 0000000000..d00ba6f977 --- /dev/null +++ b/documentation/feature/interact_menu.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Interact Menu +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/interaction.md b/documentation/feature/interaction.md new file mode 100644 index 0000000000..36365342ae --- /dev/null +++ b/documentation/feature/interaction.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Interaction +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/inventory.md b/documentation/feature/inventory.md new file mode 100644 index 0000000000..8dac5b6644 --- /dev/null +++ b/documentation/feature/inventory.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Inventory +group: feature +parent: wiki +--- +# Overview +## Resized inventory UI +Makes the inventory dialog bigger and increases the number of items that can be seen in the list at once. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/javelin.md b/documentation/feature/javelin.md index b253a25fc9..78102840c1 100644 --- a/documentation/feature/javelin.md +++ b/documentation/feature/javelin.md @@ -1,13 +1,18 @@ --- layout: wiki -title: Javelin/Titan Locking and Firing +title: Javelin group: feature -order: 5 parent: wiki --- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. -## 1. Overview -Blah blah blah +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. Steps to lock titan/Javelin: @@ -17,5 +22,7 @@ Steps to lock titan/Javelin: 4. Hold TAB over a target, it will start beeping and the constraint boxes will appear 5. Once the beeping changes to LOCK tone, and the lock crosshairs appear, click fire without releasing tab - CTRL+TAB is default key to change firemode (configurable as a key) + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/kestrel4500.md b/documentation/feature/kestrel4500.md new file mode 100644 index 0000000000..0c6e03d304 --- /dev/null +++ b/documentation/feature/kestrel4500.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Kestrel 4500 +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/laser.md b/documentation/feature/laser.md new file mode 100644 index 0000000000..6e1de22002 --- /dev/null +++ b/documentation/feature/laser.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Laser +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/laser_selfdesignate.md b/documentation/feature/laser_selfdesignate.md new file mode 100644 index 0000000000..8405d57c43 --- /dev/null +++ b/documentation/feature/laser_selfdesignate.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Laser Self-Designate +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/laserpointer.md b/documentation/feature/laserpointer.md new file mode 100644 index 0000000000..c22471e320 --- /dev/null +++ b/documentation/feature/laserpointer.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Laser Pointer +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/logistics_uavbattery.md b/documentation/feature/logistics_uavbattery.md new file mode 100644 index 0000000000..6cd3bc0b3b --- /dev/null +++ b/documentation/feature/logistics_uavbattery.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Logistics - UAV Battery +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/logistics_wirecutter.md b/documentation/feature/logistics_wirecutter.md new file mode 100644 index 0000000000..97d684e697 --- /dev/null +++ b/documentation/feature/logistics_wirecutter.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Logistics - Wirecutter +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/magazinerepack.md b/documentation/feature/magazinerepack.md new file mode 100644 index 0000000000..e9ae26f315 --- /dev/null +++ b/documentation/feature/magazinerepack.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Magazine Repack +group: feature +parent: wiki +--- +# Overview +## Repacking magazines +Adds ability to repack magazines of the same type. An optional module provides +options to adjust the repacking time of single rounds and whole magazines to +the mission maker. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/map.md b/documentation/feature/map.md new file mode 100644 index 0000000000..88a3493d9e --- /dev/null +++ b/documentation/feature/map.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Map +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/maptools.md b/documentation/feature/maptools.md new file mode 100644 index 0000000000..6814a5c1f5 --- /dev/null +++ b/documentation/feature/maptools.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Map Tools +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/markers.md b/documentation/feature/markers.md new file mode 100644 index 0000000000..eae1bfe333 --- /dev/null +++ b/documentation/feature/markers.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Markers +group: feature +parent: wiki +--- +# Overview +## Improved marker placement +Expands the "Insert Marker" menu and allows to rotate map markers. Shows the currently selected channel to prevent misplacement. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/medical-system.md b/documentation/feature/medical-system.md index 3d756b70c8..443fb4b182 100644 --- a/documentation/feature/medical-system.md +++ b/documentation/feature/medical-system.md @@ -23,7 +23,7 @@ The four main elements that basic medical introduces are: All interactions in the medical system are done with the interaction menu. Non-medics can - by default - not perform all actions, and their actions take more time as when performed by trained medics. These actions are using epinephrine and blood IVs. -### How it works +### 2.1 How it works When hit, units start to lose blood depending on the severity of their wounds. Once the level of blood falls below a certain threshold, the unit will fall unconscious and eventually die. Units will also fall unconscious when sustaining large amounts of damage at once. @@ -45,17 +45,17 @@ Besides the 4 elements introduced by basic medical, advanced introduces the foll * Various treatment methods such as CPR, different kinds of IVs and tourniquets * A basic medication simulation -### How it works +### 3.1 How it works Same as with basic, when hit an injury is sustained. Different though is that the type of injury and the severity of it are based upon how the damage was done and what caused it. This affects both blood loss and immediate consequences, such as being knocked out or being killed right away. When a player has sustained an injury, this will be indicated by flashing red of the screen; this means the player is bleeding. -##### Stopping bleeding +#### 3.1.1 Stopping bleeding In order to stop the bleeding, all injuries on every bodypart requires treatment. This is done by either applying a tourniquet to legs or arms as a temporarly solution, or by using bandages to stop the bleeding as a more permament fix. -##### Vitals +#### 3.1.2 Vitals While a unit is bleeding however, the blood volume decreases which will result in a change of vitals. Depending on the factors such as current blood volume, the blood loss rate, medication used, the blood pressure will start to drop. To counter this drop, also based upon the previously mentioned factors and others, the heart rate will adjust accordingly to attempt to keep blood pressure at safe levels. This means that for any patient it is required to keep an eye on the vitals. This is done through the interaction system by selecting check pulse or blood pressure on either the arms or head. -##### Medication +#### 3.1.3 Medication To stabalize the vitals and to counter for example pain, a player/medic can use medication. Advanced medical has 3 different medications available: * Atropine * Morphine diff --git a/documentation/feature/microdagr.md b/documentation/feature/microdagr.md new file mode 100644 index 0000000000..a98730c9f4 --- /dev/null +++ b/documentation/feature/microdagr.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: MicroDAGR +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/missileguidance.md b/documentation/feature/missileguidance.md new file mode 100644 index 0000000000..fe5aa792b3 --- /dev/null +++ b/documentation/feature/missileguidance.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Missile Guidance +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/missionmodules.md b/documentation/feature/missionmodules.md new file mode 100644 index 0000000000..771a5ef290 --- /dev/null +++ b/documentation/feature/missionmodules.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Mission Modules +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/mk6mortar.md b/documentation/feature/mk6mortar.md new file mode 100644 index 0000000000..af718eedce --- /dev/null +++ b/documentation/feature/mk6mortar.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Mk6 Mortar +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/movement.md b/documentation/feature/movement.md new file mode 100644 index 0000000000..f1d9d93df9 --- /dev/null +++ b/documentation/feature/movement.md @@ -0,0 +1,24 @@ +--- +layout: wiki +title: Movement +group: feature +parent: wiki +--- +# Overview +## Jumping +Adds the ability to jump when pressing the vault key while moving. (V - key) +## Minor animation tweaks +Walking slowly with the weapon lowered now has a less silly looking animation. +## Fatigue adjustments +Soldiers get fatigued slower, but regain their stamina slower aswell. Fatigued soldiers have a faster walking speed and no longer turn into snails. +## Weight display +Adds a weight of the current loadout display in the inventory to estimate the fatigue gain while moving in combat. Can be adjusted to display lb. instead of kg in the AGM Options Menu. +## Optics view in all stances +The player can now use the sights of rifles and pistols in all prone stances. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/nametags.md b/documentation/feature/nametags.md new file mode 100644 index 0000000000..10ff3404c0 --- /dev/null +++ b/documentation/feature/nametags.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Nametags +group: feature +parent: wiki +--- +# Overview +## Nametag and rank display +Adds nametags and soldier ranks to friendly players in multiplayer. This can be adjusted in the AGM Options Menu to not display the rank, display all nametags of nearby soldiers instead of those who are looked directly at, to require a button press to show the nametags or to disable them altogether. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/nightvision.md b/documentation/feature/nightvision.md new file mode 100644 index 0000000000..efdc5721c5 --- /dev/null +++ b/documentation/feature/nightvision.md @@ -0,0 +1,23 @@ +--- +layout: wiki +title: Nightvision +group: feature +parent: wiki +--- +# Overview +## Multiple Generation NVGs +Adds different night vision devices with varying image quality and field of +view. New Classnames for Generations 1, 2, and 4 NVGs (default ArmA3 NVGs +represents Generation 3) and a wide view NVG. +## Blending effects +Adds a blending effect depending on ammunition type when firing while using a +night vision device. Especially tracer rounds are bright, but you can use the + IR-dim tracers from AGM_Ballistics to reduce tis effect. +## Brightness adjustment +Enables the user to manually adjust NVG brightness. + +# Usage +Use Alt+PageUp and Alt+PageDown to adjust NVG brightness. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/noidle.md b/documentation/feature/noidle.md new file mode 100644 index 0000000000..aa6657728d --- /dev/null +++ b/documentation/feature/noidle.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: No Idle +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/noradio.md b/documentation/feature/noradio.md new file mode 100644 index 0000000000..f9a832abd0 --- /dev/null +++ b/documentation/feature/noradio.md @@ -0,0 +1,17 @@ +--- +layout: wiki +title: No Radio +group: feature +parent: wiki +--- +# Overview +## Silent avatar +Mutes the player's automatic callouts ("Enemy man, 100 meters, front!"). +Does not mute AI callouts. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/norearm.md b/documentation/feature/norearm.md new file mode 100644 index 0000000000..7ed7a5c515 --- /dev/null +++ b/documentation/feature/norearm.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: No Rearm +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/optics.md b/documentation/feature/optics.md new file mode 100644 index 0000000000..90b486bc88 --- /dev/null +++ b/documentation/feature/optics.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Optics +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/optionsmenu.md b/documentation/feature/optionsmenu.md new file mode 100644 index 0000000000..a0c9ad33da --- /dev/null +++ b/documentation/feature/optionsmenu.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Options Menu +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/ovepressure.md b/documentation/feature/ovepressure.md new file mode 100644 index 0000000000..af8e47ae0c --- /dev/null +++ b/documentation/feature/ovepressure.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Overpressure +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/overheating.md b/documentation/feature/overheating.md new file mode 100644 index 0000000000..3a10bf9f48 --- /dev/null +++ b/documentation/feature/overheating.md @@ -0,0 +1,27 @@ +--- +layout: wiki +title: Overheating +group: feature +parent: wiki +--- +# Overview +## Weapon Jamming +Adds a propability to jam a weapon when firing. Jams can be cleared by +reloading or by using the clear jam-key. +## Temperature simulation +Introduces weapon temperature simulation depending on weapon and bullet +mass. Hot weapons are more prone to jamming. Depending on weapon type +the accuracy and in extreme cases the muzzle velocity might be reduced +on high temperatues. Adds smoke puff and heat refraction effects to +indicate this. +## Spare barrels +Adds the ability to changes barrels on machine guns to compensate for those +effects. + +# Usage +To clear a jammed weapon, press Shift+R. + +*needs documentation on swapping barrels* + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/parachute.md b/documentation/feature/parachute.md new file mode 100644 index 0000000000..48ad0e9836 --- /dev/null +++ b/documentation/feature/parachute.md @@ -0,0 +1,22 @@ +--- +layout: wiki +title: Parachute +group: feature +parent: wiki +--- +# Overview +## Altimeter +Removes the altitude and descend speed UI elements when free-falling and +parachuting on higher difficulties and instead adds an altimeter watch type +item. +## Non-steerable parachute +Adds a non-steerable parachute variant for jet pilots. +## Landing animation +Smoothens parachute landing animation. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/protection.md b/documentation/feature/protection.md new file mode 100644 index 0000000000..2eb2a9aaef --- /dev/null +++ b/documentation/feature/protection.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Protection +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/ragdolls.md b/documentation/feature/ragdolls.md new file mode 100644 index 0000000000..585c6c71a8 --- /dev/null +++ b/documentation/feature/ragdolls.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Ragdolls +group: feature +parent: wiki +--- +# Overview +## Adjusted Ragdolls +Changes the ragdolls to react more to the force of shots and explosions. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/realisticnames.md b/documentation/feature/realisticnames.md new file mode 100644 index 0000000000..64d9a316cb --- /dev/null +++ b/documentation/feature/realisticnames.md @@ -0,0 +1,17 @@ +--- +layout: wiki +title: Realistic Names +group: feature +parent: wiki +--- +# Overview +## Real names +Changes the names of vehicles, magazines, weapons, grenades, explosive charges +and mines to their respective real-world counterparts whenever possible. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/recoil.md b/documentation/feature/recoil.md new file mode 100644 index 0000000000..919ab24836 --- /dev/null +++ b/documentation/feature/recoil.md @@ -0,0 +1,20 @@ +--- +layout: wiki +title: Recoil +group: feature +parent: wiki +--- +# Overview +## Recoil adjustment +Overhauls the recoil system reducing upwards recoil. +## Advanced cam shake +Introducing camshake when firing on foot or as vehicle gunner depending on stance and weapon type. +## Burst dispersion +Firing in longer burst (> 3 rounds per burst) slightly reduces the accuracy. Firing machine guns in bursts is now useful. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/reload.md b/documentation/feature/reload.md new file mode 100644 index 0000000000..f791521a63 --- /dev/null +++ b/documentation/feature/reload.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Reload +group: feature +parent: wiki +--- +# Overview +## Ammo count +Hides the actual round count of magazines and removes the icon when the current magazine is emptied. The player can instead check the magazine weight, but that gives only estimated values for magazines with more than 10 rounds. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/reloadlaunchers.md b/documentation/feature/reloadlaunchers.md new file mode 100644 index 0000000000..7b1f26cea1 --- /dev/null +++ b/documentation/feature/reloadlaunchers.md @@ -0,0 +1,19 @@ +--- +layout: wiki +title: Reload Launchers +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. +r \ No newline at end of file diff --git a/documentation/feature/respawn.md b/documentation/feature/respawn.md new file mode 100644 index 0000000000..6059f33c59 --- /dev/null +++ b/documentation/feature/respawn.md @@ -0,0 +1,20 @@ +--- +layout: wiki +title: Respawn +group: feature +parent: wiki +--- +# Overview +## Respawn with same gear +Requires the Respawn Gear module to be placed. Respawned soldiers now have their loadout when killed. +## Friendly Fire messages +Shows friendly fire warnings in system chat if the module is placed. Works even in higher difficulties where kill messages are normally disabled. +## Rallypoints +Adds rallypoints to all 3 sides to enable teleportation from base spawn to FOBs. Requires some setup from the mission maker. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/safemode.md b/documentation/feature/safemode.md new file mode 100644 index 0000000000..ea4f3fe902 --- /dev/null +++ b/documentation/feature/safemode.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Safe Mode +group: feature +parent: wiki +--- +# Overview +## Safety +You can now use the safety mode of any weapon. Switching weapon modes takes the safety off. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/scopes.md b/documentation/feature/scopes.md new file mode 100644 index 0000000000..fb29c7d6e1 --- /dev/null +++ b/documentation/feature/scopes.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Scopes +group: feature +parent: wiki +--- +# Overview +## Sniper Scope Adjustment +Enables snipers to adjust their scopes horizontally and vertically in mils. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/smallarms.md b/documentation/feature/smallarms.md new file mode 100644 index 0000000000..11e68d4373 --- /dev/null +++ b/documentation/feature/smallarms.md @@ -0,0 +1,20 @@ +--- +layout: wiki +title: Small Arms +group: feature +parent: wiki +--- +# Overview +## Magazine Names +Unifies the name formatting of magazines similar to Arma 2 standards. +## No tracers in non-tracer mags +Assault rifles no longer have tracer rounds in their non-tracer magazines. This doesn't effect the additional tracers in the last rounds of machine gun magazines. +## Real magazine round counts +All pistol and sub machine gun magazines now have adjusted capacaties to match their real life counterparts. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/switchunits.md b/documentation/feature/switchunits.md new file mode 100644 index 0000000000..71ace0e055 --- /dev/null +++ b/documentation/feature/switchunits.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Switch Units +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/testmissions.md b/documentation/feature/testmissions.md new file mode 100644 index 0000000000..7d7ac52af8 --- /dev/null +++ b/documentation/feature/testmissions.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Test Missions +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/thermals.md b/documentation/feature/thermals.md new file mode 100644 index 0000000000..12f79a311b --- /dev/null +++ b/documentation/feature/thermals.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Thermals +group: feature +parent: wiki +--- +# Overview +## Body Warmth +Adjusts the thermal properties of humans making them less like torches. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/vector.md b/documentation/feature/vector.md new file mode 100644 index 0000000000..277f5eb524 --- /dev/null +++ b/documentation/feature/vector.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Vector +group: feature +parent: wiki +--- +# Overview +## Vector IV Rangefinder +Adds the Vector IV rangefinder, including all real-life usage modes (distance between two points, angle between two points etc.) + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/vehiclelock.md b/documentation/feature/vehiclelock.md new file mode 100644 index 0000000000..239661d153 --- /dev/null +++ b/documentation/feature/vehiclelock.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Vehicle Lock +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/vehicles.md b/documentation/feature/vehicles.md new file mode 100644 index 0000000000..534bb35171 --- /dev/null +++ b/documentation/feature/vehicles.md @@ -0,0 +1,32 @@ +--- +layout: wiki +title: Vehicles +group: feature +parent: wiki +--- +# Overview +## Speedlimiter +Adds ability to limit the max. speed of any vehicle. +## Engine start delay +The engine has to be started before the vehicle can move. Starting the engine takes aprox. 1 to 2 seconds. +## Fuel capacity +The range of all vehicle gets signifigantly reduced to reflect ranges of their real life counterparts. Scaled down to match the relative short distances in Arma. A full vehicle on mission start should still most likely never need a refueling during a mission. +## Main gun muzzles +APCs and Tanks now share a muzzle for all ammunition types of their main guns. This prevents an exploit that skips the reloading time of a round or clip while changing the ammunition type. Also makes it possible to switch between ammunition types using the scroll wheel like in Arma 2. +## Boat machine gun tracers +NATO and AAF armed boats now use their respective tracer colours like any vehicle when they fire their rear gun. (Red for BluFor, yellow for Indep) +## Improved smoke launcher of Fennek (Strider) +Reduced smoke shell count and launch angle of the AAF Fennek to match the models smoke launcher. +## Stabilized optic of Fennek (Strider) +Stabilizes the commander's view in the Fennek (Strider). +## Vehicle mounted machine guns ROF +The rate of fire of vehicle mounted miniguns and machine guns is adjusted to match real life values. +## 120mm gun and mortar behavior +MBT main guns and mortars can no longer lock on enemies. The AT rounds of both now have raised cost values to encourage the AI to not use those rounds against foot soldiers over their machine guns or HE rounds. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/weaponselect.md b/documentation/feature/weaponselect.md new file mode 100644 index 0000000000..872e27cad0 --- /dev/null +++ b/documentation/feature/weaponselect.md @@ -0,0 +1,24 @@ +--- +layout: wiki +title: Weapon Select +group: feature +parent: wiki +--- +# Overview +## Weapon select +The number key can be used to quickly switch between weapons. (1 key - pistol, 2 key - rifle, 3 key - grenade launcher, 4 key - rocket launcher, 5 key - binocular) +## Holster weapon +Adds the ability to holster a weapon on the back. (0 key) +## Engine select +Quickly turn engine on and off (1 key - turn off, 2 key - turn on) +## Weapon select +Quickly switch between vehicle weapons (1-3 key) +## Grenade select +To prevent accidents a grenade has to be selected before it can be thrown. Toggles between explosive and non-explosive grenades. When spamming the throw key, the player won't automatically switch to frag grenades when all smokes are used up. Also shows an indicator to quickly see how many grenades are left when selecting and after throwing (6 key - switch between frag grenades, 7 key - switch between other grenades) + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/weather.md b/documentation/feature/weather.md new file mode 100644 index 0000000000..2cbeea5e7e --- /dev/null +++ b/documentation/feature/weather.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: Weather +group: feature +parent: wiki +--- +# Overview +## Sub-feature 1 +Short description of sub-feature 1. +## Sub-feature 2 +Short description of sub-feature 2. + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/feature/windeflection.md b/documentation/feature/windeflection.md new file mode 100644 index 0000000000..7bca0b0f60 --- /dev/null +++ b/documentation/feature/windeflection.md @@ -0,0 +1,16 @@ +--- +layout: wiki +title: Wind Deflection +group: feature +parent: wiki +--- +# Overview +## Wind Deflection +Adds ballistic influences of wind, air density and temperature + +# Usage +Short overview of how to use the feature, e.g. menu options, key bindings, +instructions. May not apply to all modules. + +# Dependencies +List of modules that must be present for this module to work. diff --git a/documentation/framework/advanced-missile-guidance.md b/documentation/framework/advanced-missile-guidance.md index 3029b7b3bd..8beee862b7 100644 --- a/documentation/framework/advanced-missile-guidance.md +++ b/documentation/framework/advanced-missile-guidance.md @@ -6,7 +6,7 @@ order: 5 parent: wiki --- -# 1. Overview +## 1. Overview The ACE Advanced Missile Guidance Framework provides a setup of configuration settings, functions and a execution framework for addon makers to integrate with the missile guidance and targeting mechanisms of ACE. It also provides for mod makers to create their own custom guidance methods within the framework. @@ -18,23 +18,23 @@ ACE3 provides a full suite of base concepts and guidance for the majority of mod Finally, flight profiles and mechanics for realistic missile simulations are also implemented; allowing for lock-steering bump guidance flight such as with the M47 Dragon or GBU steering fins, or finely tuned direct flight guidance which is currently avialable with other missile types. -# 2. Details +## 2. Details The framework is broken up into 3 major components: Locking Types, Seeker Types and Attack Profiles. In combination, these components build out the entire process of launching, locking and going terminal flight against targets. -### Components +### 2.1 Components -##### 1. Locking Types +#### 2.1.1 Locking Types Locking types provide the basic functionality of targeting which will be based to a seeker type, providing target aquisition for seekers. This provides the basic functionality for providing pre-determined targets for a seeker, or allowing the seeker to perform its own target aquisition and locking. Additionally, the seeker may reference back into the locking type in order to re-perform target aquisition. -##### 2. Seeker Types +#### 2.1.2 Seeker Types Each seeker is generally assumed to be the logic for the seeker head unit within any given munition. Seekers within this framework provide the basic targeting functionality for the entire framework. The locking type will provide a generic target to the seeker, or the seeker may aquire a target on its own. The seeker then provides a target, either an object or a ASL position, which is then passed further into the framework. This target (or position) should be the actual current target position for the missiles flight. Seekers are required to perform all limitations and checks within their systems, although various limitations have been provided in this framework such as LOS FOV, laser guidance, etc. -##### 3. Attack Profiles +#### 2.1.3 Attack Profiles An attack profile adjusts the current target flight location to create the actual flight path of the missile. The attack profile is provided with all parameters of the system, including the returned target of the seeker. Using this information, the attack profile then will adjust the *direct flight target position* to specifically direct where and how the missile shall flight. -## How it all ties together +## 3. How it all ties together The system is executed in a linear series of calls to each step of the process, and feeding back the return from that step to the next step. Execution is conducted using Locking->Seeker->Profile, iteratively every frame of execution. Flight times are adjusted to accTime values and FPS lag, giving consistent flight. @@ -42,9 +42,9 @@ On each step of execution, a target specification array [targetObj, targetPos] i In the simplest sense, the entire system provides the flight trajectory of the missile homing directly on the "adjusted attack position"; thus, an attack profile would ajust this position to direct the missile. For example, Top down attacks return the adjusted attack position high above the target, until entering their terminal stages, which then changes the position to be directly ontop of the target - thus "walking the missile" along its flight path and to the kill. -# 2. Adding AMG to a missile +## 4. Adding AMG to a missile -## Enabling guidance on Ammo Types +### 4.1 Enabling guidance on Ammo Types ``` class CfgAmmo { class MissileBase; @@ -81,9 +81,9 @@ class CfgAmmo { }; ``` -# 2. Creating your own custom seekers and attack profiles +## 5. Creating your own custom seekers and attack profiles -## Adding seeker types and attack profiles +### 5.1 Adding seeker types and attack profiles ``` class ace_missileguidance_attackProfiles{ @@ -104,4 +104,4 @@ class ace_missileguidance_seekerTypes { functionName = "my_fnc_doSeekerType"; }; }; -``` \ No newline at end of file +``` diff --git a/documentation/framework/carry-drag.md b/documentation/framework/carry-drag.md index daaa9fb95a..d117bcbc4a 100644 --- a/documentation/framework/carry-drag.md +++ b/documentation/framework/carry-drag.md @@ -6,7 +6,7 @@ order: 5 parent: wiki --- -# 1. Config Values +## 1. Config Values ``` class CfgVehicles { diff --git a/documentation/missionmaker/mission-tools.md b/documentation/missionmaker/mission-tools.md new file mode 100644 index 0000000000..a7104676f0 --- /dev/null +++ b/documentation/missionmaker/mission-tools.md @@ -0,0 +1,59 @@ +--- +layout: wiki +title: Mission tools +group: missionmaker +order: 10 +parent: wiki +--- + +## 1. ACE Rallypoints +*Part of: ace_respawn* + +"ACE rally points" is a two way teleport system between two positions. Usually this is used to transport units that have died during a mission back to the front line. The rally points are portrayed by flagpoles (West, East and Independant flagpoles are available) that have a "Base" and an "Exit" version. + +They can be found in the editor under: "Empty" >> "ACE Respawn" + +**Classnames:** +* `ACE_Rallypoint_West`, `ACE_RallypointExit_West` +* `ACE_Rallypoint_East`, `ACE_RallypointExit_East` +* `ACE_Rallypoint_Independent`, `ACE_RallypointExit_Independent` + +Using the Interaction Menu on a rallypoint offers the ability to teleport from one flagpole to the other flagpole and vice versa. + +If you want to change the texture of the flag use this line: +```c++ +this setFlagTexture 'path\to\my\texture\my_awesome_clan_logo.paa'; +``` + +*Note: You can't place more than one rallypoint of the same type.* + +All units synced to the ["Rallypoint System" module](./modules.html#1.14-rallypoint-system) are able to move the rallypoint. + +
+
Note:
+

It's important to mention that this doesn't work for player who join during a mission (JIP = Join in progress). That's something we can't change because that's the way Bohemia has implemented their module framework.

+
+ +To enable other units to move them add this to the unit's initialization code: + +```c++ +_unit setVariable ["ACE_canMoveRallypoint", true, true]; +``` + +## 2. ACE SwitchUnits +*Part of: ace_switchunits* + +"ACE SwitchUnits" is a tool for misson makers to quickly add PvP (Player vs. Player) elements to a mission. In short it enables a player to control AI units. Allowing players to perform as enemies even during a COOP mission increases the authenticity of the enemy and thus the immersion for everyone. + +The most prominent feature of ACE SwitchUnits is that you can add it to nearly every existing mission and get AI control out of the box. Dynamic mission like "Enemy Assault", "Patrol Ops", "Invade & Annex", etc. don't need to be touched to make all random spawned AI's controllable. + +In its current form you're able to switch to infantry (vehicles, etc. are planned) from all four sides (West, East, Independent, Civilian). + +To enable a player to control AI add the following to its init line: + +```c++ +this setVariable ["ACE_CanSwitchUnits", true]; +``` +Once this player spawns, all controllable AI will be marked on his map and he'll be able to click on the map to switch to this unit. The initial unit will be prone to damage, but has no equipment and can't run. So it would be wise to hide or move this unit far from other players. + +The [module settings](./modules.html#1.16-switchunits-system) define which side a player can control or how big the radius of the safe zone is. The safe zone is a circular zone around AI units that must be clear from players of an opposing side to be able to switch to. \ No newline at end of file diff --git a/documentation/missionmaker/modules.md b/documentation/missionmaker/modules.md index 239f1db789..ff18139482 100644 --- a/documentation/missionmaker/modules.md +++ b/documentation/missionmaker/modules.md @@ -6,11 +6,7 @@ order: 5 parent: wiki --- - -**THIS PAGE IS NOT UP2DATE.** - - -## 1. Modules +## 1. ACE ### 1.1 Advanced Ballistics *Part of: ace_advanced_ballistics* @@ -18,49 +14,58 @@ This module allows to enable advanced external- and internal ballistics. **Settings:** -1. **Advanced Ballistics (Boolean)
** +1. **Advanced Ballistics (Boolean)**
Enables advanced ballistics.
`Default value: No` -2. **Always Enabled For Snipers (Boolean)
** +2. **Always Enabled For Snipers (Boolean)**
Always enables advanced ballistics when high power optics are used.
`Default value: Yes` -3. **Disabled In FullAuto Mode (Boolean)
** +3. **Disabled In FullAuto Mode (Boolean)**
Disables the advanced ballistics during full auto fire.
`Default value: No` -4. **Disabled For Non Local Players (Boolean)
** +4. **Disabled For Non Local Players (Boolean)**
Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer).
`Default value: Yes` -5. **Enable Ammo Temperature Simulation (Boolean)
** +5. **Enable Ammo Temperature Simulation (Boolean)**
Muzzle velocity varies with ammo temperature.
`Default value: Yes` -6. **Enable Barrel Length Simulation (Boolean)
** +6. **Enable Barrel Length Simulation (Boolean)**
Muzzle velocity varies with barrel length.
`Default value: Yes` -7. **Enable Bullet Trace Effect (Boolean)
** +7. **Enable Bullet Trace Effect (Boolean)**
Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics).
-8. **Simulation Interval (Number)
** +8. **Simulation Interval (Number)**
Defines the interval between every calculation step.
`Default value: 0.05` -9. **Simulation Radius (Number)
** +9. **Simulation Radius (Number)**
Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles.
`Default value: 3000` -### 1.2 BlueForceTracking +### 1.2 Allow Config Export +*Part of: ace_Optionmenu* + +This modules allows to export all current ACE settings from the ACE Option menu to the clipboard and RPT file. + +1. **Allow (Boolean)**
+Enables the "export" button in the ACE Option menu
+`Default value: Yes` + +### 1.3 BlueForceTracking *Part of: ace_map* -When adding the "BlueForceTracking" module to your mission it adds map markers to every group on the players side and refreshes them in certain configurable interval (in seconds). The module takes the group type into account and uses the proper NATO icon for each marker. +When adding the "Blue Force Tracking" module to your mission it adds map markers to every group on the players side and refreshes them in certain configurable interval (in seconds). The module takes the group type into account and uses the proper NATO icon for each marker. **Settings:** -1. **Interval (Number)
** +1. **Interval (Number)**
How often the markers should be refreshed (in seconds).
-`Default value: 5` -2. **Hide AI Groups (Boolean)
** +`Default value: 1` +2. **Hide AI Groups (Boolean)**
Hide markers for "AI only" groups.
`Default value: No` -### 1.3 Check PBOs -*Part of: ace_core* +### 1.4 Check PBOs +*Part of: ace_common* If you are worried that players haven't updated ACE or other mods to the version you're using on the server, you can place the "Check PBOs" module on your map. You can choose one of three posible actions that are being executed when a player joins that has a wrong version of ACE or an other mod: @@ -70,191 +75,458 @@ If you are worried that players haven't updated ACE or other mods to the version **Settings:** -1. **Action (Option)
** +1. **Action (Option)**
What to do with people who do not have the right PBOs.
`Default value: "Warn once"` -2. **Check all addons (Boolean)
** +2. **Check all addons (Boolean)**
Check all addons instead of only those of ACE?
`Default value: "No"` -3. **Whitelist
** +3. **Whitelist**
You can make a whitelist of addons that don't have to be on the server. If you want to use the "Check all addons" option of this module and allow the usage of client side modifications like Blastcore or JSRS, you have to list them here. The list must be in the following format: `["ADDON1","ADDON2",...]` where the addons are CfgPatches references to all PBOs of the optional mod. To figure these out, you can use the scripting command `activatedAddons` in the editor while those mods are enabled. Example 1: @Blastcore-A3:
-```sqf +``` ["warfxpe","blastcore_vep"] ``` + Example 2: @JSRS:
-```sqf +``` [TBD] -``` +``` + Example 3: @JSRS + @Blastcore-A3:
-```sqf +``` [TBD, "warfxpe","blastcore_vep"] ``` -### 1.4 Explosive System + +### 1.5 Explosive System *Part of: ace_explosive* The "Explosive System" module lets you tweak the settings for the new explosive system that ACE introduces. **Settings:** -1. **Require explosive specialists? (Boolean)
** +1. **Require specialists? (Boolean)**
Require explosive specialists to disable explosives.
`Default value: No` -2. **Punish non-specialists? (Boolean)
** +2. **Punish non-specialists? (Boolean)**
Increase the time it takes to complete actions for non-specialists.
`Default value: Yes` -### 1.5 Fatigue System (deprecated) -**Warning:** -*This module is deprecated and only in there not to break older missions that have used this module. It will be removed in a future update. It serves no purpose.* ### 1.6 Friendly Fire Messages *Part of: ace_respawn* The "Friendly Fire Messages" module triggers a message when a player kills a friendly or civilian unit. This module isn't needed on servers with a low difficulty setting. -### 1.7 Interaction + +### 1.7 Hearing +*Part of: ace_hearing* + +Placing this modules allows you to disable combat deafness usually triggerd by loud explosions or heavy weapons in a players proximity. + +**Settings:** + +1. **Enable combat deafness? (Boolean)***
+Enable combat deafness?
+`Default value: Yes` + + +### 1.8 Interaction System *Part of: ace_interaction* +This module allows you to tweak if players should be able to use team management functions (e.g. "switch group", "become leader"). + +**Settings:** + +1. **Enable Team Management (Boolean)**
+Should players be allowed to use the Team Management Menu?.
+`Default value: Yes` + +### 1.9 Make Unit Surrender +*Part of: ace_captives* + +Syncing units to that module sets them in the captive state with their arms behind their back. Usefull for e.g. hostage rescue missions. + + +### 1.10 Map +*Part of: ace_map* + +ACE3 introdcues a bit more realism for the vanilla Arma 3 map and how it behaves. Some of these settings can be toggled by this module. + +**Settings:** + +1. **Map illumination? (Boolean)**
+Calculate dynamic map illumination based on light conditions?.
+`Default value: Yes` +2. **Map shake? (Boolean)**
+Make map shake when walking?.
+`Default value: Yes` +3. **Limit map zoom? (Boolean)**
+Limit the amount of zoom available for the map?.
+`Default value: No` +4. **Show cursor coordinates? (Boolean)**
+Show the grid coordinates on the mouse pointer?.
+`Default value: No` + + +### 1.11 MicroDAGR Map Fill +*Part of: ace_microdagr* + +Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap. + +**Settings:** + +1. **MicroDAGR Map Fill (Option)**
+How much map data is filled on MicroDAGR's.
+`Default value: "Full Satellite + Buildings"` + + +### 1.12 MK6 Settings +*Part of: ace_mk6mortar* + +ACE3 now includes the first iteration of getting a less arcady point and click mortar experience. +Placing this modules allows you to enable the increased realism in game. + +**Settings:** + +1. **Air Resistance (Boolean)**
+For Player Shots, Model Air Resistance and Wind Effects.
+`Default value: Yes` +2. **Allow MK6 Computer (Boolean)**
+Show the Computer and Rangefinder (these **NEED** to be removed if you enable air resistance).
+`Default value: No` +3. **Allow MK6 Compass (Boolean)**
+Show the MK6 Digital Compass.
+`Default value: Yes` + +### 1.13 Name Tags +*Part of: ace_nametags* + This module allows you to tweak the settings for player names tags. **Settings:** -1. **Player Names View Distance (Number)
** -Sets the distance (in meters) at which player name tags become visible.
+1. **Player Names View Distance (Number)**
+Distance (in meters) at which player names are shown.
`Default value: 5` - -### 1.8 Medical System -*Part of: ace_medical* - -When using the medical system ACE offers you probably want to fine tune some aspects of the wounding, healing or gameplay mechanics and fit them to your needs. The "Medical System" module offers a lot of settings to do just that. - -**Settings:** - -1. **Bleeding Speed Coefficient (Number)
** -Multiplier for the rate of bleeding.
-`Default value: 1` -2. **Pain Effect Coefficient (Number)
** -Multiplier for the intensity of the pain effect (chromatic abberation).
-`Default value: 1` -3. **Max Unconscious Time (Number)
** -Maximum time (in seconds) for a unit to be unconscious before dying. -1 disables this.
-`Default value: -1` -4. **Allow non-medics? (Boolean)
** -This setting is used to allow non-medics to use epipens and bloodbags.
-`Default value: No` -5. **Punish non-medics? (Boolean)
** -Increase the time it takes to complete actions for non-medics.
-`Default value: Yes` -6. **Require diagnosis? (Boolean)
** -Require an unconscious patient to be diagnosed before allowing treatment.
-`Default value: No` -7. **Prevent instant death? (Boolean)
** -Prevent instant death and always put players in unconscious state instead.
-`Default value: No` -8. **Prevent death while unconscious? (Boolean)
** -Make unconscious units invulnerable.
-`Default value: No` -9. **Single Bandage (Boolean)
** -Use one bandage to heal the entire body.
-`Default value: No` -10. **Unconscious can chat? (Boolean)
** -Allow all players to use chat while unconcious? Admin can always use the chat regardless.
+2. **Show name tags for AI? (Option)**
+Show the name and rank tags for friendly AI units, or by default allows players to choose it on their own.
+`Default value: "Do Not Force"` +3. **Show crew info? (Option)**
+Show vehicle crew info, or by default allows players to choose it on their own.
+`Default value: "Do Not Force"` +4. **Show for Vehicles? (Boolean)**
+Show cursor NameTag for vehicle commander (only if client has name tags enabled).
`Default value: No` -### 1.9 Rallypoint System + +### 1.14 Rallypoint System *Part of: ace_respawn* -This module was introduced with 0.94 and enables Mission Makers to specificly enable units to move a rallypoint. Every unit that is synced with that module is able to move a rallypoint. +This module enables Mission Makers to specificly enable units to move a rallypoint. Every unit that is synced with that module is able to move a rallypoint. -**Note:** -It's important to mention that this doesn't work for player who join during a mission (JIP = Join in progress). That's something we can't change because that's the way Bohemia has implemented their module framework. To enable JIP players to move rally points have a look at [3.1 ACE Rallypoints](#31-ace-rallypoints). +
+
Note:
+

It's important to mention that this doesn't work for player who join during a mission (JIP = Join in progress). That's something we can't change because that's the way Bohemia has implemented their module framework.

+
-### 1.10 Repair System -*Part of: ace_logistics* +To enable JIP players to move rally points have a look at [ACE Rallypoints](./mission-tools.html#1.-ace-rallypoints). -Placing the "Repair System" module makes it possible to define the time it takes for certain repair actions. -**Settings:** - -1. **Heavy Repair Time (Number)
** -Time to repair engine/turret/body/fuel components (in seconds).
-`Default value: 10` -2. **Wheel Replace Time (Number)
** -Time to replace a wheel (in seconds).
-`Default value: 10` -3. **Track Replace Time (Number)
** -Time to replace a track (in seconds).
-`Default value: 10` -4. **Maximum Repaired Damage (Number)
** -Limits the amount of damage that can be repaired. 0 = Repair all damage, 1 = Cannot repair any damage.
-`Default value: 0` - -### 1.11 Respawn System +### 1.15 Respawn System *Part of: ace_respawn* The "Respawn System" module enables players to respawn with the gear they had before dying and to remove bodies of players after a configurable interval (in seconds). **Settings:** -1. **Save Gear? (Boolean)
** +1. **Save Gear? (Boolean)**
Respawn with the gear a player had just before his death.
`Default value: No` -### 1.12 SwitchUnits System +### 1.16 SwitchUnits System *Part of: ace_switchunits* -The [SwitchUnits System](#32-ace-switchunits) enables players to control certain AI units on the map. +The [SwitchUnits System](./mission-tools.html#2.-ace-switchunits) enables players to control certain AI units on the map. **Settings:** -1. **Switch To West? (Boolean)
** +1. **Switch To West? (Boolean)**
Allow switching to west units?
`Default value: No` -2. **Switch To East? (Boolean)
** +2. **Switch To East? (Boolean)**
Allow switching to east units?
`Default value: No` -3. **Switch To Independent? (Boolean)
** +3. **Switch To Independent? (Boolean)**
Allow switching to independent units?
`Default value: No` -4. **Switch To Civilian? (Boolean)
** +4. **Switch To Civilian? (Boolean)**
Allow switching to civilian units?
`Default value: No` -5. **Enable Safe Zone? (Boolean)
** +5. **Enable Safe Zone? (Boolean)**
Enable a safe zone around enemy units? Players can't switch to units inside of the safe zone.
`Default value: Yes` -6. **Safe Zone Radius (Number)
** +6. **Safe Zone Radius (Number)**
The safe zone around players from a different team (in meters)
`Default value: 200` -### 1.13 LSD Vehicles -*Part of: ace_core* +### 1.17 Vehicle Lock +*Part of: ace_vehiclelock* -### 1.14 Wind Deflection +#### 1.17.1 Vehicle Key Assign +Sync with vehicles and players. Will handout custom keys to players for every synced vehicle. Only valid for objects present at mission start. + +#### 1.17.2 Vehicle Lock Setup +Settings for lockpick strength and initial vehicle lock state. Removes ambiguous lock states. + +**Settings:** + +1. **Lock Vehicle Inventory? (Boolean)**
+Locks the inventory of locked vehicles
+`Default value: No` +2. **Vehicle Starting Lock State (Option)**
+Set lock state for all vehicles (removes ambiguous lock states)
+`Default value: "As Is"` +3. **Default Lockpick Strength (Number)**
+Default Time to lockpick (in seconds)
+`Default value: 10` + + +### 1.18 Weather +*Part of: ace_weather* + +This module allows you to customize the weather settings. + +**Settings:** + +1. **Weather propagation (Boolean)**
+Enables sever side weather propagation.
+`Default value: Yes` +2. **ACE Weather (Boolean)**
+Overrides the default weather (editor, mission settings) with ACE weather (map based).
+`Default value: Yes` +3. **Sync Rain (Boolean)**
+Synchronizes rain.
+`Default value: Yes` +3. **Sync Wind (Boolean)**
+Synchronizes wind.
+`Default value: Yes` +3. **Sync Misc (Boolean)**
+Synchronizes lightnings, rainbow, fog, ...
+`Default value: Yes` +4. **Update Interval (Number)**
+Defines the interval (seconds) between weather updates.
+`Default value: 60` + +### 1.19 Wind Deflection *Part of: ace_winddeflection* This module allows you to define when wind deflection is active. +
+
Note:
+

Wind Deflection doesn't work in combination with Advanced Ballistics. If the Advanced Ballistics module is placed Wind deflection will exit and won't trigger.

+
+ **Settings:** -1. **Wind Deflection (Boolean)
** +1. **Wind Deflection (Boolean)**
Enables wind deflection.
`Default value: Yes` -2. **Vehicle Enabled (Boolean)
** +2. **Vehicle Enabled (Boolean)**
Enables wind deflection for static/vehicle gunners.
`Default value: Yes` -3. **Simulation Interval (Number)
** +3. **Simulation Interval (Number)**
Defines the interval between every calculation step.
`Default value: 0.05` -4. **Simulation Radius (Number)
** +4. **Simulation Radius (Number)**
Defines the radius around the player (in meters) at which projectiles are wind deflected.
`Default value: 3000` + +### 1.20 LSD Vehicles +*Part of: ace_core* + And then there's the "LSD Vehicles" module … it does 'something' to all vehicles synced to that module. -http://youtu.be/X3e0LTexEok +
+ +
+ +## 2. ACE Medical +*Part of: ace_medical* + +### 2.1 Medical Settings + +This module allows to tweak all the medical settings used in ACE3 + +**Settings:** + +1. **Medical Level (Option)**
+What is the medical simulation level?
+`Default value: "Basic"` +2. **Medics setting (Option)**
+What is the level of detail preferred for medics?
+`Default value: "Normal"` +3. **Enable Litter (Boolean)**
+Enable litter being created upon treatment.
+`Default value: "Normal"` +4. **Life time of litter objects (Number)**
+How long should litter objects stay? In seconds. -1 is forever.
+`Default value: 1800` +5. **Enable Screams (Boolean)**
+Enable screaming by injured units.
+`Default value: Yes` +6. **Player Damage (Number)**
+What is the damage a player can take before being killed?
+`Default value: 1` +7. **AI Damage (Number)**
+What is the damage an AI can take before being killed?
+`Default value: 1` +8. **AI Unconsciousness (Option)**
+Allow AI to go unconscious.
+`Default value: "50/50"` +9. **Prevent instant death (Boolean)**
+Have a unit move to unconscious instead of death.
+`Default value: No` +10. **Bleeding coefficient (Number)**
+Coefficient to modify the bleeding speed.
+`Default value: 1` +11. **Pain coefficient (Number)**
+Coefficient to modify the pain intensity.
+`Default value: 1` +12. **Pain coefficient (Boolean)**
+Keep unit status synced. Recommended on.
+`Default value: Yes` + + +### 2.2 Advanced Medical Settings + +This module allows you to change the default Advanced Medical Settings, when [2.1 Medical Settings](#2.1-medical-settings) is set to "Advanced". + +**Settings:** + +1. **Enabled for (Option)**
+Select what units the advanced medical system will be enabled for.
+`Default value: "Players only"` +2. **Enable Advanced wounds (Boolean)**
+Allow reopening of bandaged wounds?
+`Default value: No` +3. **Vehicle Crashes (Boolean)**
+Do units take damage from a vehicle crash?
+`Default value: Yes` +4. **Allow PAK (Option)**
+Who can use the PAK for full heal?
+`Default value: "Medics only"` +5. **Remove PAK on use (Boolean)**
+Should PAK be removed on usage?
+`Default value: Yes` +6. **Locations PAK (Option)**
+Where can the personal aid kit be used?
+`Default value: "Vehicles & facility"` +7. **Allow Surgical kit (Option)**
+Who can use the surgical kit?
+`Default value: "Medics only"` +8. **Remove Surgical kit (Boolean)**
+Should Surgical kit be removed on usage?
+`Default value: Yes` +9. **Locations Surgical kit (Option)**
+Where can the Surgical kit be used?
+`Default value: "Vehicles & facility"` + + +### 2.3 Revive Settings + +This modules allows a mission maker to limit the amount of revives for units in basic and advanced medical. + +**Settings:** + +1. **Enable Revive (Option)**
+Enable a basic revive system
+`Default value: "disable"` +2. **Max Revive time (Number)**
+Max amount of seconds a unit can spend in revive state
+`Default value: 120` +3. **Max Revive lives (Number)**
+Max amount of lives a unit. 0 or -1 is disabled.
+`Default value: -1` + + +### 2.4 Set Medic Class + +Using this module you can define which unit class is defined as a medic / doctor. + +**Settings:** + +1. **List (String)**
+List of unit names that will be classified as medic, separated by commas.
+`Default value: ""` +2. **Is Medic (Boolean)**
+Medics allow for more advanced treatment in case of Advanced Medic roles enabled
+`Default value: "Regular medic"` + + +### 2.5 Set Medical Facility + +Defines an object as a medical facility. This allows for more advanced treatments. Can be synced with buildings and vehicles. + +**Settings:** + +1. **Is Medical Facility (Boolean)**
+Registers an object as a medical facility.
+`Default value: Yes` + + +### 2.6 Set Medical Vehicle + +Defines an object as a medical facility. This allows for more advanced treatments. Can be synced with buildings and vehicles. + +**Settings:** + +1. **List (String)**
+List of vehicles that will be classified as medical vehicle, separated by commas.
+`Default value: ""` +2. **Is Medical Vehicle (Boolean)**
+Whether or not the objects in the list will be a medical vehicle.
+`Default value: Yes` + + +## 3. ACE Mission Modules +*Part of: ace_missionmodules* + +### 3.1 Ambiance Sounds + +Used for ambiance sounds loop (synced across MP). + +This module randomizes the time when the sound file is played and the position where the sound file is played (If "Follow Players" is set to No). +`Minimal Distance` and `Maximal Distance` influence the position from where the sound file is played. Setting both values to 0 forces the module to play the sound from where it was placed in the editor. +`Minimal Delay` and `Maximal Delay` work in a similar fashion but are used to randomize when the sound file is played. Setting both values to 0 plays the sound from mission start. + +**Settings:** + +1. **Sounds (String)**
+Class names of the ambiance sounds played. Separated by ','. (Example: `radio_track_01, electricity_loop`).
+`Default value: ""` +2. **Minimal Distance (Number)**
+Used for calculating a random position and sets the minimal distance between the players and the played sound file(s) (in meters)
+`Default value: 400` +3. **Maximum Distance (Number)**
+Used for calculating a random position and sets the maximum distance between the players and the played sound file(s) (in meters)
+`Default value: 900` +4. **Minimal Delay (Number)**
+Minimal delay (in seconds) between sounds played
+`Default value: 10` +5. **Maximum Delay (Number)**
+Maximum delay (in seconds) between sounds played
+`Default value: 10` +6. **Follow Players (Boolean)**
+Follow players. If set to false, loop will play sounds only nearby logic position.
+`Default value: No` +7. **Volume (Number)**
+The volume of the sounds played
+`Default value: 1` diff --git a/documentation/user/getting-started.md b/documentation/user/getting-started.md index 012f307445..baed16588b 100644 --- a/documentation/user/getting-started.md +++ b/documentation/user/getting-started.md @@ -13,10 +13,8 @@ parent: wiki Downloaded ACE3 and have no idea where to start? This page serves as a document to help new players get started with things like the medical system, or how to adjust your scope. -### Table of contents -1. [Vector 21](#vector-21) -### Vector 21 +### 1. Vector 21 *Part of: ace_vector* ACE3 adds a realistic depiction of the Vector 21 rangefinder to the game. Unlike other rangefinders, it doesn't just magically show you the range to your target, but in exchange allows you to do alot of things with it that the other choices in Arma do not offer. The Vector's functions include, but are not limited to: @@ -45,46 +43,46 @@ The Vector 21 rangefinder has the following usage modes: 9. Fall of shot #### 1. Slope distance -Measuring Slope distance +Measuring Slope distance Press and hold the "Distance" key until the red pointing circle appears. Sight the circle on the object and release the key. #### 2. Azimuth -Measuring Azimuth +Measuring Azimuth Press and hold the "Azimuth" key until the red pointing circle appears. Sight the circle on the object and release the key. #### 3. Slope distance and Azimuth -Measuring Slope distance and Azimuth +Measuring Slope distance and Azimuth Press and hold both the "Distance" and "Azimuth" key until the red pointing circle appears. Sight the circle on the object and release both keys. #### 4. Horizontal distance and height difference -Measuring Horizontal distance and height difference +Measuring Horizontal distance and height difference Tap the "Distance" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and release the key. #### 5. Azimuth and Inclination -Measuring Azimuth and Inclination +Measuring Azimuth and Inclination Tap the "Azimuth" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and release the key. #### 6. Distance between two points -Measuring Distance between two points +Measuring Distance between two points Press and hold the "Distance" key until the red pointing circle appears. Sight the circle on the first object and tap the "Azimuth" key while further holding the "Distance" key. The first measurement is confirmed ("1-P" = first point). Sight the second object and release the "Distance" key. #### 7. Horizontal and vertical distance between two points -Measuring Horizontal and vertical distance between two points +Measuring Horizontal and vertical distance between two points Tap the "Distance" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and tap the "Azimuth" key once. The first measurement is confirmed ("1-P" = first point). Sight the second object and release the "Distance" key. #### 8. Horizontal distance and azimuth between two points -Measuring Horizontal distance and azimuth between two points +Measuring Horizontal distance and azimuth between two points Press and hold the "Azimuth" key until the red pointing circle appears. Sight the circle on the first object and tap the "Distance" key while further holding the "Azimuth" key. The first measurement is confirmed ("1-P" = first point). Sight the second object and release the "Azimuth" key. #### 9. Fall of shot -Measuring Fall of shot +Measuring Fall of shot Tap the "Azimuth" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and tap the "Distance" key while further holding the "Azimuth" key. The first measurement is confirmed ("1-P" = first point). Sight the Fall of shot and release the "Azimuth" key. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If the "Distance" key is tapped the height correction values will be displayed (`UP` and `dn`). diff --git a/documentation/user/promotional-material.md b/documentation/user/promotional-material.md index 834cd66efc..4c928f1fb3 100644 --- a/documentation/user/promotional-material.md +++ b/documentation/user/promotional-material.md @@ -8,16 +8,17 @@ parent: wiki You are hereby granted to use the ACE3 logos and imagery for promotional purposes. You are NOT allowed to use it commercially. -## Colors +## 1. Colors -![white](https://cloud.githubusercontent.com/assets/1235520/6618806/d19959e4-c8c5-11e4-85f4-814c93ec7778.jpg) White: `#ffffff, rgb(255, 255, 255)`
-![black](https://cloud.githubusercontent.com/assets/1235520/6618807/d2c7bf0e-c8c5-11e4-8c43-6de02d47898c.jpg) Black: `#000000, rgb(0, 0, 0)`
-![red](https://cloud.githubusercontent.com/assets/1235520/6618808/d3e6a62a-c8c5-11e4-9313-4db522a40117.jpg) Red: `#ba2619, rgb(186, 38, 25)` +* White: `#ffffff, rgb(255, 255, 255)` +* Black: `#000000, rgb(0, 0, 0)` +* Red: `#ba2619, rgb(186, 38, 25)` -## Logo + +## 2. Logo When using the ACE3 logo please do not stretch or skew it. -### Black +### 2.1 Black @@ -25,10 +26,10 @@ When using the ACE3 logo please do not stretch or skew it. * [PNG (transparent background)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.png) * [EPS (vector file)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.eps) -### White +### 2.2 White * [JPG (black background)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/white/ACE3-Logo.jpg) * [PNG (transparent background)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/white/ACE3-Logo.png) -* [EPS (vector file)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/white/ACE3-Logo.eps) \ No newline at end of file +* [EPS (vector file)](https://github.com/KoffeinFlummi/ACE3/blob/master/extras/assets/logo/white/ACE3-Logo.eps) diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt index 038bb71d5c..9f4a8a29fa 100644 --- a/extensions/CMakeLists.txt +++ b/extensions/CMakeLists.txt @@ -55,7 +55,8 @@ set(GLOBAL_SOURCES ${GLOBAL_RC}) # Add extensions to build here add_subdirectory(fcs) -add_subdirectory(breakLine) +add_subdirectory(break_line) +add_subdirectory(clipboard) add_subdirectory(advanced_ballistics) message("Build Type: ${CMAKE_BUILD_TYPE}") \ No newline at end of file diff --git a/extensions/advanced_ballistics/AdvancedBallistics.cpp b/extensions/advanced_ballistics/AdvancedBallistics.cpp index e62a564dca..e6c55184a7 100644 --- a/extensions/advanced_ballistics/AdvancedBallistics.cpp +++ b/extensions/advanced_ballistics/AdvancedBallistics.cpp @@ -1,23 +1,21 @@ #include "ace_common.h" -#include #include #include -#include +#include +#include -#define _USE_MATH_DEFINES -#include - -#define GRAVITY 9.80665 -#define ABSOLUTE_ZERO_IN_CELSIUS -273.15 +#define M_PI 3.14159265358979323846f +#define GRAVITY 9.80665f +#define ABSOLUTE_ZERO_IN_CELSIUS -273.15f #define KELVIN(t) (t - ABSOLUTE_ZERO_IN_CELSIUS) #define CELSIUS(t) (t + ABSOLUTE_ZERO_IN_CELSIUS) -#define UNIVERSAL_GAS_CONSTANT 8.314 -#define WATER_VAPOR_MOLAR_MASS 0.018016 -#define DRY_AIR_MOLAR_MASS 0.028964 -#define SPECIFIC_GAS_CONSTANT_DRY_AIR 287.058 -#define STD_AIR_DENSITY_ICAO 1.22498 -#define STD_AIR_DENSITY_ASM 1.20885 +#define UNIVERSAL_GAS_CONSTANT 8.314f +#define WATER_VAPOR_MOLAR_MASS 0.018016f +#define DRY_AIR_MOLAR_MASS 0.028964f +#define SPECIFIC_GAS_CONSTANT_DRY_AIR 287.058f +#define STD_AIR_DENSITY_ICAO 1.22498f +#define STD_AIR_DENSITY_ASM 1.20885f struct Bullet { double airFriction; @@ -46,6 +44,8 @@ struct Bullet { double lastFrame; double hDeflection; double spinDrift; + unsigned randSeed; + std::default_random_engine randGenerator; }; struct Map { @@ -57,7 +57,7 @@ struct Map { }; std::vector bulletDatabase; -std::map mapDatabase; +std::unordered_map mapDatabase; std::string worldName = ""; Map* map = &mapDatabase[""]; @@ -96,10 +96,9 @@ double calculateAirDensity(double temperature, double pressure, double relativeH double vaporPressure = relativeHumidity * _pSat; double partialPressure = pressure - vaporPressure; - return (partialPressure * 0.028964 + vaporPressure * 0.018016) / (8.314 * (273.15 + temperature)); - } - else { - return pressure / (287.058 * (273.15 + temperature)); + return (partialPressure * DRY_AIR_MOLAR_MASS + vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(temperature)); + } else { + return pressure / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(temperature)); } } @@ -107,15 +106,13 @@ double calculateAtmosphericCorrection(double ballisticCoefficient, double temper double airDensity = calculateAirDensity(temperature, pressure, relativeHumidity); if (!strcmp(atmosphereModel, "ICAO")) { - return (1.22498 / airDensity) * ballisticCoefficient; - } - else { - return (1.20885 / airDensity) * ballisticCoefficient; + return (STD_AIR_DENSITY_ICAO / airDensity) * ballisticCoefficient; + } else { + return (STD_AIR_DENSITY_ASM / airDensity) * ballisticCoefficient; } } double calculateRetard(int DragFunction, double DragCoefficient, double Velocity) { - double vel = Velocity * 3.2808399; double val = -1; double A = -1; @@ -123,7 +120,7 @@ double calculateRetard(int DragFunction, double DragCoefficient, double Velocity switch (DragFunction) { case 1: - if (vel> 4230) { A = 1.477404177730177e-04; M = 1.9565; } + if (vel> 4230) { A = 1.477404177730177e-04; M = 1.9565; } else if (vel> 3680) { A = 1.920339268755614e-04; M = 1.925; } else if (vel> 3450) { A = 2.894751026819746e-04; M = 1.875; } else if (vel> 3295) { A = 4.349905111115636e-04; M = 1.825; } @@ -167,7 +164,7 @@ double calculateRetard(int DragFunction, double DragCoefficient, double Velocity break; case 2: - if (vel> 1674) { A = .0079470052136733; M = 1.36999902851493; } + if (vel> 1674) { A = .0079470052136733; M = 1.36999902851493; } else if (vel> 1172) { A = 1.00419763721974e-03; M = 1.65392237010294; } else if (vel> 1060) { A = 7.15571228255369e-23; M = 7.91913562392361; } else if (vel> 949) { A = 1.39589807205091e-10; M = 3.81439537623717; } @@ -177,7 +174,7 @@ double calculateRetard(int DragFunction, double DragCoefficient, double Velocity break; case 5: - if (vel> 1730) { A = 7.24854775171929e-03; M = 1.41538574492812; } + if (vel> 1730) { A = 7.24854775171929e-03; M = 1.41538574492812; } else if (vel> 1228) { A = 3.50563361516117e-05; M = 2.13077307854948; } else if (vel> 1116) { A = 1.84029481181151e-13; M = 4.81927320350395; } else if (vel> 1004) { A = 1.34713064017409e-22; M = 7.8100555281422; } @@ -187,7 +184,7 @@ double calculateRetard(int DragFunction, double DragCoefficient, double Velocity break; case 6: - if (vel> 3236) { A = 0.0455384883480781; M = 1.15997674041274; } + if (vel> 3236) { A = 0.0455384883480781; M = 1.15997674041274; } else if (vel> 2065) { A = 7.167261849653769e-02; M = 1.10704436538885; } else if (vel> 1311) { A = 1.66676386084348e-03; M = 1.60085100195952; } else if (vel> 1144) { A = 1.01482730119215e-07; M = 2.9569674731838; } @@ -197,7 +194,7 @@ double calculateRetard(int DragFunction, double DragCoefficient, double Velocity break; case 7: - if (vel> 4200) { A = 1.29081656775919e-09; M = 3.24121295355962; } + if (vel> 4200) { A = 1.29081656775919e-09; M = 3.24121295355962; } else if (vel> 3000) { A = 0.0171422231434847; M = 1.27907168025204; } else if (vel> 1470) { A = 2.33355948302505e-03; M = 1.52693913274526; } else if (vel> 1260) { A = 7.97592111627665e-04; M = 1.67688974440324; } @@ -209,7 +206,7 @@ double calculateRetard(int DragFunction, double DragCoefficient, double Velocity break; case 8: - if (vel> 3571) { A = .0112263766252305; M = 1.33207346655961; } + if (vel> 3571) { A = .0112263766252305; M = 1.33207346655961; } else if (vel> 1841) { A = .0167252613732636; M = 1.28662041261785; } else if (vel> 1120) { A = 2.20172456619625e-03; M = 1.55636358091189; } else if (vel> 1088) { A = 2.0538037167098e-16; M = 5.80410776994789; } @@ -227,7 +224,7 @@ double calculateRetard(int DragFunction, double DragCoefficient, double Velocity val = val / 3.2808399; return val; } - + return 0.0; } @@ -238,8 +235,7 @@ extern "C" void __stdcall RVExtension(char *output, int outputSize, const char *function) { - if (!strcmp(function, "version")) - { + if (!strcmp(function, "version")) { int n = sprintf_s(output, outputSize, "%s", ACE_FULL_VERSION_STR); return; } @@ -262,8 +258,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) retard = calculateRetard(dragModel, ballisticCoefficient, velocity); int n = sprintf_s(output, outputSize, "%f", retard); return; - } - else if (!strcmp(mode, "atmosphericCorrection")) { + } else if (!strcmp(mode, "atmosphericCorrection")) { double ballisticCoefficient = 1.0; double temperature = 15.0; double pressure = 1013.25; @@ -279,8 +274,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) ballisticCoefficient = calculateAtmosphericCorrection(ballisticCoefficient, temperature, pressure, humidity, atmosphereModel); int n = sprintf_s(output, outputSize, "%f", ballisticCoefficient); return; - } - else if (!strcmp(mode, "new")) { + } else if (!strcmp(mode, "new")) { unsigned int index = 0; double airFriction = 0.0; char* ballisticCoefficientArray; @@ -311,8 +305,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) ballisticCoefficientArray++; ballisticCoefficientArray[strlen(ballisticCoefficientArray) - 1] = 0; ballisticCoefficient = strtok_s(ballisticCoefficientArray, ",", &token); - while (ballisticCoefficient != NULL) - { + while (ballisticCoefficient != NULL) { ballisticCoefficients.push_back(strtod(ballisticCoefficient, NULL)); ballisticCoefficient = strtok_s(NULL, ",", &token); } @@ -320,8 +313,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) velocityBoundaryArray++; velocityBoundaryArray[strlen(velocityBoundaryArray) - 1] = 0; velocityBoundary = strtok_s(velocityBoundaryArray, ",", &token); - while (velocityBoundary != NULL) - { + while (velocityBoundary != NULL) { velocityBoundaries.push_back(strtod(velocityBoundary, NULL)); velocityBoundary = strtok_s(NULL, ",", &token); } @@ -335,8 +327,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) originArray++; originArray[strlen(originArray) - 1] = 0; originEntry = strtok_s(originArray, ",", &token); - while (originEntry != NULL) - { + while (originEntry != NULL) { origin.push_back(strtod(originEntry, NULL)); originEntry = strtok_s(NULL, ",", &token); } @@ -348,10 +339,8 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) tickTime = strtod(strtok_s(NULL, ":", &next_token), NULL); tickTime += strtod(strtok_s(NULL, ":", &next_token), NULL); - while (index >= bulletDatabase.size()) { - Bullet bullet; - bulletDatabase.push_back(bullet); - } + if (index >= bulletDatabase.size()) + bulletDatabase.resize(index+1); bulletDatabase[index].airFriction = airFriction; bulletDatabase[index].ballisticCoefficients = ballisticCoefficients; @@ -374,11 +363,11 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) bulletDatabase[index].spinDrift = 0.0; bulletDatabase[index].speed = 0.0; bulletDatabase[index].frames = 0.0; + bulletDatabase[index].randSeed = 0; int n = sprintf_s(output, outputSize, "%s", ""); return; - } - else if (!strcmp(mode, "simulate")) { + } else if (!strcmp(mode, "simulate")) { // simulate:0:[-0.109985,542.529,-3.98301]:[3751.57,5332.23,214.252]:[0.598153,2.38829,0]:28.6:0:0.481542:0:215.16 unsigned int index = 0; char* velocityArray; @@ -413,6 +402,22 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) tickTime = strtod(strtok_s(NULL, ":", &next_token), NULL); tickTime += strtod(strtok_s(NULL, ":", &next_token), NULL); + if (bulletDatabase[index].randSeed == 0) { + int angle = (int)round(atan2(velocity[0], velocity[1]) * 360 / M_PI); + bulletDatabase[index].randSeed = (unsigned)(720 + angle) % 720; + bulletDatabase[index].randSeed *= 3; + bulletDatabase[index].randSeed += (unsigned)round(abs(velocity[2]) / 2); + bulletDatabase[index].randSeed *= 3; + bulletDatabase[index].randSeed += (unsigned)round(abs(bulletDatabase[index].origin[0] / 2)); + bulletDatabase[index].randSeed *= 3; + bulletDatabase[index].randSeed += (unsigned)round(abs(bulletDatabase[index].origin[1] / 2)); + bulletDatabase[index].randSeed *= 3; + bulletDatabase[index].randSeed += (unsigned)abs(bulletDatabase[index].temperature) * 10; + bulletDatabase[index].randSeed *= 3; + bulletDatabase[index].randSeed += (unsigned)abs(bulletDatabase[index].humidity) * 10; + bulletDatabase[index].randGenerator.seed(bulletDatabase[index].randSeed); + } + double ballisticCoefficient = 1.0; double dragRef = 0.0; double drag = 0.0; @@ -426,6 +431,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) double trueVelocity[3] = { 0.0, 0.0, 0.0 }; double trueSpeed = 0.0; double temperature = 0.0; + double pressure = 1013.25; double windSpeed = 0.0; double windAttenuation = 1.0; double velocityOffset[3] = { 0.0, 0.0, 0.0 }; @@ -442,12 +448,11 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) bulletDatabase[index].speed += bulletSpeed; bulletDatabase[index].frames += 1; bulletSpeedAvg = (bulletDatabase[index].speed / bulletDatabase[index].frames); - + windSpeed = sqrt(pow(wind[0], 2) + pow(wind[1], 2) + pow(wind[2], 2)); - if (windSpeed > 0.1) - { + if (windSpeed > 0.1) { double windSourceTerrain[3]; - + windSourceTerrain[0] = position[0] - wind[0] / windSpeed * 100; windSourceTerrain[1] = position[1] - wind[1] / windSpeed * 100; windSourceTerrain[2] = position[2] - wind[2] / windSpeed * 100; @@ -466,8 +471,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) } } - if (windSpeed > 0.1) - { + if (windSpeed > 0.1) { double windSourceObstacles[3]; windSourceObstacles[0] = position[0] - wind[0] / windSpeed * 25; @@ -480,8 +484,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) } } - if (windAttenuation < 1) - { + if (windAttenuation < 1) { wind[0] *= windAttenuation; wind[1] *= windAttenuation; wind[2] *= windAttenuation; @@ -494,10 +497,9 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) trueSpeed = sqrt(pow(trueVelocity[0], 2) + pow(trueVelocity[1], 2) + pow(trueVelocity[2], 2)); temperature = bulletDatabase[index].temperature - 0.0065 * position[2]; - - if (bulletDatabase[index].ballisticCoefficients.size() == bulletDatabase[index].velocityBoundaries.size() + 1) { - double pressure = 1013.25 * exp(-(bulletDatabase[index].altitude + position[2]) / 7990) - 10 * bulletDatabase[index].overcast; + pressure = 1013.25 * exp(-(bulletDatabase[index].altitude + position[2]) / 7990) - 10 * bulletDatabase[index].overcast; + if (bulletDatabase[index].ballisticCoefficients.size() == bulletDatabase[index].velocityBoundaries.size() + 1) { dragRef = deltaT * bulletDatabase[index].airFriction * bulletSpeed * bulletSpeed; accelRef[0] = (velocity[0] / bulletSpeed) * dragRef; @@ -509,10 +511,8 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) velocityOffset[2] -= accelRef[2]; ballisticCoefficient = bulletDatabase[index].ballisticCoefficients[0]; - for (int i = (int)bulletDatabase[index].velocityBoundaries.size() - 1; i >= 0; i = i - 1) - { - if (bulletSpeed < bulletDatabase[index].velocityBoundaries[i]) - { + for (int i = (int)bulletDatabase[index].velocityBoundaries.size() - 1; i >= 0; i = i - 1) { + if (bulletSpeed < bulletDatabase[index].velocityBoundaries[i]) { ballisticCoefficient = bulletDatabase[index].ballisticCoefficients[i + 1]; break; } @@ -527,14 +527,13 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) velocityOffset[0] -= accel[0]; velocityOffset[1] -= accel[1]; velocityOffset[2] -= accel[2]; - } - else { - double pressureDeviation = 1013.25 * exp(-(bulletDatabase[index].altitude + position[2]) / 7990) - 1013.25 - 10 * bulletDatabase[index].overcast; - double airFriction = bulletDatabase[index].airFriction + ((temperature - 15) * 0.0000015 + bulletDatabase[index].humidity * 0.0000040 + pressureDeviation * -0.0000009); + } else { + double airDensity = calculateAirDensity(temperature, pressure, bulletDatabase[index].humidity); + double airFriction = bulletDatabase[index].airFriction * airDensity / STD_AIR_DENSITY_ICAO; if (airFriction != bulletDatabase[index].airFriction || windSpeed > 0) { dragRef = deltaT * bulletDatabase[index].airFriction * bulletSpeed * bulletSpeed; - + accelRef[0] = (velocity[0] / bulletSpeed) * dragRef; accelRef[1] = (velocity[1] / bulletSpeed) * dragRef; accelRef[2] = (velocity[2] / bulletSpeed) * dragRef; @@ -574,18 +573,18 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) positionOffset[0] += sin(bulletDir + M_PI / 2) * spinDriftPartial; positionOffset[1] += cos(bulletDir + M_PI / 2) * spinDriftPartial; - if (bulletSpeed < 345 && bulletSpeedAvg > 340 && bulletSpeed > 335) - { - srand((unsigned)time(NULL)); - velocityOffset[0] += (((double)rand() / (RAND_MAX)) * 0.4 - 0.2) * (1 - bulletDatabase[index].transonicStabilityCoef); - velocityOffset[1] += (((double)rand() / (RAND_MAX)) * 0.4 - 0.2) * (1 - bulletDatabase[index].transonicStabilityCoef); - velocityOffset[2] += (((double)rand() / (RAND_MAX)) * 0.4 - 0.2) * (1 - bulletDatabase[index].transonicStabilityCoef); + if (bulletSpeed < 345 && bulletSpeedAvg > 340 && bulletSpeed > 335) { + std::uniform_real_distribution distribution(0.0, 1.0); + double coef = 1.0f - bulletDatabase[index].transonicStabilityCoef; + + velocityOffset[0] += (distribution(bulletDatabase[index].randGenerator) * 0.8 - 0.4) * coef; + velocityOffset[1] += (distribution(bulletDatabase[index].randGenerator) * 0.8 - 0.4) * coef; + velocityOffset[2] += (distribution(bulletDatabase[index].randGenerator) * 0.8 - 0.4) * coef; }; int n = sprintf_s(output, outputSize, "_bullet setVelocity (_bulletVelocity vectorAdd [%f, %f, %f]); _bullet setPosASL (_bulletPosition vectorAdd [%f, %f, %f]);", velocityOffset[0], velocityOffset[1], velocityOffset[2], positionOffset[0], positionOffset[1], positionOffset[2]); return; - } - else if (!strcmp(mode, "set")) { + } else if (!strcmp(mode, "set")) { int height = 0; int numObjects = 0; int surfaceIsWater = 0; @@ -600,8 +599,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) int n = sprintf_s(output, outputSize, "%s", ""); return; - } - else if (!strcmp(mode, "init")) { + } else if (!strcmp(mode, "init")) { int mapSize = 0; int mapGrids = 0; int gridCells = 0; @@ -611,8 +609,12 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) mapGrids = (int)ceil((double)mapSize / 50.0) + 1; gridCells = mapGrids * mapGrids; + + auto map_iter = mapDatabase.find(worldName); + if (map_iter == mapDatabase.end()) + return; + map = &map_iter->second; - map = &mapDatabase[worldName]; if (map->gridHeights.size() == gridCells) { int n = sprintf_s(output, outputSize, "%s", "Terrain already initialized"); return; diff --git a/extensions/breakLine/CMakeLists.txt b/extensions/break_line/CMakeLists.txt similarity index 89% rename from extensions/breakLine/CMakeLists.txt rename to extensions/break_line/CMakeLists.txt index d34ae1b58e..00a74d4c3a 100644 --- a/extensions/breakLine/CMakeLists.txt +++ b/extensions/break_line/CMakeLists.txt @@ -1,4 +1,4 @@ -set(ACE_EXTENSION_NAME "ace_breakLine") +set(ACE_EXTENSION_NAME "ace_break_line") file(GLOB SOURCES *.h *.hpp *.c *.cpp) add_library( ${ACE_EXTENSION_NAME} SHARED ${GLOBAL_SOURCES} ${SOURCES}) diff --git a/extensions/breakLine/ace_breakLine.cpp b/extensions/break_line/ace_break_line.cpp similarity index 98% rename from extensions/breakLine/ace_breakLine.cpp rename to extensions/break_line/ace_break_line.cpp index 89ea1cfd85..2b253c05bc 100644 --- a/extensions/breakLine/ace_breakLine.cpp +++ b/extensions/break_line/ace_break_line.cpp @@ -1,5 +1,5 @@ /* - * ace_breakLine.cpp + * ace_break_line.cpp * * Takes a string and insert as many line breaks as needed so it fits a given width * diff --git a/extensions/clipboard/CMakeLists.txt b/extensions/clipboard/CMakeLists.txt new file mode 100644 index 0000000000..b8f846844c --- /dev/null +++ b/extensions/clipboard/CMakeLists.txt @@ -0,0 +1,12 @@ +set(ACE_EXTENSION_NAME "ace_clipboard") + +file(GLOB SOURCES *.h *.hpp *.c *.cpp) +add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES} ${GLOBAL_SOURCES}) +target_link_libraries(${ACE_EXTENSION_NAME} ace_common) +set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") +set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES FOLDER Extensions) + +if(CMAKE_COMPILER_IS_GNUCXX) + set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_START_STATIC 1) + set_target_properties(${ACE_EXTENSION_NAME} PROPERTIES LINK_SEARCH_END_STATIC 1) +endif() \ No newline at end of file diff --git a/extensions/clipboard/ace_clipboard.cpp b/extensions/clipboard/ace_clipboard.cpp new file mode 100644 index 0000000000..4809a14acf --- /dev/null +++ b/extensions/clipboard/ace_clipboard.cpp @@ -0,0 +1,87 @@ +/* + * ace_clipboard.cpp + * + * Takes a string and copies it to the clipboard; bypasses arma 8k clippy limit. + * + * Takes: + * Localized string as string + * + * Returns: + * None + */ +#include "ace_common.h" +#include +#include + +extern "C" { + __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); +}; + +std::string gClipboardData; + +void __stdcall RVExtension(char *output, int outputSize, const char *function) { + std::string cur_input(function); + std::string result; + + if (cur_input.length() < 1) + return; + + if (!strcmp(function, "version")) { + strncpy(output, ACE_FULL_VERSION_STR, outputSize); + return; + } + +#ifdef _WIN32 + + if (!strcmp(function, "--COMPLETE--")) { + HGLOBAL hClipboardData = GlobalAlloc(GMEM_FIXED, gClipboardData.length() + 1); + if (!hClipboardData) { + result = "GlobalAlloc() failed, GetLastError=" + GetLastError(); + gClipboardData = ""; + return; + } + + char *pClipboardData = (char *)GlobalLock(hClipboardData); + if (!pClipboardData) { + result = "GlobalLock() failed, GetLastError=" + GetLastError(); + gClipboardData = ""; + return; + } + memcpy(pClipboardData, gClipboardData.c_str(), gClipboardData.length()); + pClipboardData[gClipboardData.length() + 1] = 0x00; + + GlobalUnlock(hClipboardData); + + if (!OpenClipboard(NULL)) { + result = "OpenClipboard() failed, GetLastError=" + GetLastError(); + } + else { + if (!EmptyClipboard()) { + result = "OpenClipboard() failed, GetLastError=" + GetLastError(); + } + else { + if (!SetClipboardData(CF_TEXT, hClipboardData)) { + result = "SetClipboardData() failed, GetLastError=" + GetLastError(); + } + else { + if (!CloseClipboard()) { + result = "CloseClipboard() failed, GetLastError=" + GetLastError(); + } + } + } + } + + gClipboardData = ""; + } else { + gClipboardData = gClipboardData + cur_input; + } + + end: + if(result.length() > 1) + memcpy(output, result.c_str(), result.length()+1); + + #endif + + +} + diff --git a/extras/CfgAmmoReference.hpp b/extras/CfgAmmoReference.hpp index 85201b92cc..5c0ef9e3f2 100644 --- a/extras/CfgAmmoReference.hpp +++ b/extras/CfgAmmoReference.hpp @@ -5,16 +5,16 @@ class CfgAmmo airFriction=-0.001265; hit=8; typicalSpeed=750; - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class ACE_556x45_Ball_Mk262 : B_556x45_Ball { airFriction=-0.001125; @@ -22,16 +22,16 @@ class CfgAmmo deflecting=18; hit=11; typicalSpeed=836; - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class ACE_556x45_Ball_Mk318 : B_556x45_Ball { airFriction=-0.001120; @@ -39,16 +39,16 @@ class CfgAmmo deflecting=18; hit=9; typicalSpeed=886; - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class B_556x45_Ball_Tracer_Red; class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red { @@ -60,16 +60,16 @@ class CfgAmmo deflecting=18; hit=7; typicalSpeed=880; - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={780, 880, 920}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_556x45_Ball_Tracer_Yellow; class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Yellow { @@ -78,30 +78,30 @@ class CfgAmmo deflecting=18; hit=7; typicalSpeed=883; - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_65x39_Caseless : BulletBase { airFriction=-0.000785; typicalSpeed=800; - ACE_caliber=0.264; - ACE_bulletLength=1.295; - ACE_bulletMass=123; + ACE_caliber=6.706; + ACE_bulletLength=32.893; + ACE_bulletMass=7.9704; 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.263}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={730, 760, 788, 800, 810, 830}; - ACE_barrelLengths[]={10, 16, 20, 24, 26, 30}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4, 762.0}; }; class B_65x39_Case_yellow; class ACE_65x39_Caseless_Tracer_Dim : B_65x39_Case_yellow { @@ -115,31 +115,31 @@ class CfgAmmo { airFriction=-0.00078; typicalSpeed=820 ; - ACE_caliber=0.264; - ACE_bulletLength=1.364; - ACE_bulletMass=139; + ACE_caliber=6.706; + ACE_bulletLength=34.646; + ACE_bulletMass=9.0072; 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.290}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={730, 760, 790, 820, 830}; - ACE_barrelLengths[]={10, 16, 20, 24, 26}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class B_762x51_Ball : BulletBase { airFriction=-0.001035; typicalSpeed=833; hit=9; - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class B_762x51_Tracer_Yellow; class ACE_B_762x51_Tracer_Dim: B_762x51_Tracer_Yellow { @@ -150,126 +150,126 @@ class CfgAmmo caliber=1.05; hit=16; typicalSpeed=790; - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.243}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={750, 780, 790, 794}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball { airFriction=-0.00103; caliber=0.85; hit=14; typicalSpeed=890; - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=130; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=8.424; 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}; + ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; class ACE_762x51_Ball_Subsonic : B_762x51_Ball { airFriction=-0.000535; caliber=0.5; hit=6; typicalSpeed=790; - ACE_caliber=0.308; - ACE_bulletLength=1.340; - ACE_bulletMass=200; + ACE_caliber=7.823; + ACE_bulletLength=34.036; + ACE_bulletMass=12.96; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { airFriction=-0.000830; caliber=1.08; hit=17; typicalSpeed=900; - ACE_caliber=0.308; - ACE_bulletLength=1.353; - ACE_bulletMass=190; + ACE_caliber=7.823; + ACE_bulletLength=34.366; + ACE_bulletMass=12.312; 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.268}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={865, 900, 924}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball { airFriction=-0.000815; caliber=1.12; hit=18; typicalSpeed=867; - ACE_caliber=0.308; - ACE_bulletLength=1.489; - ACE_bulletMass=220; + ACE_caliber=7.823; + ACE_bulletLength=37.821; + ACE_bulletMass=14.256; 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.310}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={847, 867, 877}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball { airFriction=-0.00076; caliber=1.15; hit=19; typicalSpeed=853; - ACE_caliber=0.308; - ACE_bulletLength=1.602; - ACE_bulletMass=230; + ACE_caliber=7.823; + ACE_bulletLength=40.691; + ACE_bulletMass=14.904; 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.368}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={800, 853, 884}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_762x54_Ball: B_762x51_Ball { airFriction=-0.001023; typicalSpeed=820; - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x54_Ball_7N14 : B_762x51_Ball { airFriction=-0.001023; caliber=0.95; hit=15; typicalSpeed=820; - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class B_762x54_Tracer_Green; class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green { @@ -277,158 +277,158 @@ class CfgAmmo caliber=0.9; hit=15; typicalSpeed=800; - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class ACE_762x35_Ball : B_762x51_Ball { airFriction=-0.000821; caliber=0.9; hit=11; typicalSpeed=790; - ACE_caliber=0.308; - ACE_bulletLength=1.153; - ACE_bulletMass=125; + ACE_caliber=7.823; + ACE_bulletLength=29.286; + ACE_bulletMass=8.1; 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[]={620, 655, 675}; - ACE_barrelLengths[]={9, 16, 20}; + ACE_barrelLengths[]={228.6, 406.4, 508.0}; }; class ACE_762x39_Ball : B_762x51_Ball { airFriction=-0.0015168; hit=12; typicalSpeed=716; - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Yellow { airFriction=-0.0015168; hit=12; typicalSpeed=716; - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=117; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.5816; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_9x21_Ball : BulletBase { airFriction=-0.00125; typicalSpeed=390; hit=6; - ACE_caliber=0.356; - ACE_bulletLength=0.610; - ACE_bulletMass=115; + ACE_caliber=9.042; + ACE_bulletLength=15.494; + ACE_bulletMass=7.452; 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.17}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={440, 460, 480}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class ACE_9x18_Ball_57N181S : B_9x21_Ball { hit=5; airFriction=-0.001234; typicalSpeed=298; - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class ACE_9x19_Ball : B_9x21_Ball { airFriction=-0.001234; typicalSpeed=370; hit=6; - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class ACE_10x25_Ball : B_9x21_Ball { airFriction=-0.00168; typicalSpeed=425; hit=7; - ACE_caliber=0.5; - ACE_bulletLength=0.764; - ACE_bulletMass=165; + ACE_caliber=12.7; + ACE_bulletLength=19.406; + ACE_bulletMass=10.692; 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="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={360, 400, 430}; - ACE_barrelLengths[]={4, 4.61, 9}; + ACE_barrelLengths[]={101.6, 117.094, 228.6}; }; class ACE_765x17_Ball: B_9x21_Ball { airFriction=-0.001213; typicalSpeed=282; hit=7; - ACE_caliber=0.3125; - ACE_bulletLength=0.610; - ACE_bulletMass=65; + ACE_caliber=7.938; + ACE_bulletLength=15.494; + ACE_bulletMass=4.212; 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.118}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={282, 300, 320}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class ACE_303_Ball : ACE_762x51_Ball_M118LR { airFriction=-0.00083; typicalSpeed=761; - ACE_caliber=0.311; - ACE_bulletLength=1.227; - ACE_bulletMass=174; + ACE_caliber=7.899; + ACE_bulletLength=31.166; + ACE_bulletMass=11.2752; 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}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_93x64_Ball : BulletBase { airFriction=-0.00106; typicalSpeed=880; - ACE_caliber=0.366; - ACE_bulletLength=1.350; - ACE_bulletMass=230; + ACE_caliber=9.296; + ACE_bulletLength=34.29; + ACE_bulletMass=14.904; ACE_transonicStabilityCoef=1; 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.368}; @@ -436,15 +436,15 @@ class CfgAmmo ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={850, 870, 880}; - ACE_barrelLengths[]={20, 24.41, 26}; + ACE_barrelLengths[]={508.0, 620.014, 660.4}; }; class B_408_Ball : BulletBase { timeToLive=10; airFriction=-0.000395; typicalSpeed=910; - ACE_caliber=0.408; - ACE_bulletLength=2.126; - ACE_bulletMass=410; + ACE_caliber=10.363; + ACE_bulletLength=54.0; + ACE_bulletMass=26.568; ACE_transonicStabilityCoef=1; 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.97}; @@ -452,698 +452,698 @@ class CfgAmmo ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={910}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class ACE_106x83mm_Ball : B_408_Ball { timeToLive=10; - ACE_caliber=0.416; - ACE_bulletLength=2.089; - ACE_bulletMass=398; + ACE_caliber=10.566; + ACE_bulletLength=53.061; + ACE_bulletMass=25.7904; 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.72}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={960}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class B_338_Ball : BulletBase { timeToLive=10; airFriction=-0.000606; typicalSpeed=915; - ACE_caliber=0.338; - ACE_bulletLength=1.558; - ACE_bulletMass=250; + ACE_caliber=8.585; + ACE_bulletLength=39.573; + ACE_bulletMass=16.2; 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.322}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={880, 915, 925}; - ACE_barrelLengths[]={20, 26, 28}; + ACE_barrelLengths[]={508.0, 660.4, 711.2}; }; class B_338_NM_Ball : BulletBase { airFriction=-0.000537; typicalSpeed=820; - ACE_caliber=0.338; - ACE_bulletLength=1.70; - ACE_bulletMass=300; + ACE_caliber=8.585; + ACE_bulletLength=43.18; + ACE_bulletMass=19.44; 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.381}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={790, 807, 820}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; 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; - ACE_bulletMass=300; + ACE_caliber=8.585; + ACE_bulletLength=43.18; + ACE_bulletMass=19.44; 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.381}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={800, 820, 826, 830}; - ACE_barrelLengths[]={20, 24, 26.5, 28}; + ACE_barrelLengths[]={508.0, 609.6, 673.1, 711.2}; }; class ACE_338_Ball_API526 : B_338_Ball { timeToLive=10; airFriction=-0.000673; caliber=2.4; typicalSpeed=826; - ACE_caliber=0.338; - ACE_bulletLength=1.535; - ACE_bulletMass=253; + ACE_caliber=8.585; + ACE_bulletLength=38.989; + ACE_bulletMass=16.3944; 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.290}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={880, 915, 925}; - ACE_barrelLengths[]={20, 26, 28}; + ACE_barrelLengths[]={508.0, 660.4, 711.2}; }; class B_127x54_Ball : BulletBase { airFriction=-0.00014; typicalSpeed=300; - ACE_caliber=0.510; - ACE_bulletLength=2.540; - ACE_bulletMass=750; + ACE_caliber=12.954; + ACE_bulletLength=64.516; + ACE_bulletMass=48.6; 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[]={1.050}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={300}; - ACE_barrelLengths[]={17.2}; + ACE_barrelLengths[]={436.88}; }; class B_127x99_Ball : BulletBase { timeToLive=10; airFriction=-0.0006; typicalSpeed=853; - ACE_caliber=0.510; - ACE_bulletLength=2.310; - ACE_bulletMass=647; + ACE_caliber=12.954; + ACE_bulletLength=58.674; + ACE_bulletMass=41.9256; 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[]={853}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class ACE_127x99_Ball_AMAX : B_127x99_Ball { timeToLive=10; airFriction=-0.000374; typicalSpeed=860; - ACE_caliber=0.510; - ACE_bulletLength=2.540; - ACE_bulletMass=750; + ACE_caliber=12.954; + ACE_bulletLength=64.516; + ACE_bulletMass=48.6; 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.050}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={860}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class B_127x108_Ball : BulletBase { timeToLive=10; airFriction=-0.00064; typicalSpeed=820; - ACE_caliber=0.511; - ACE_bulletLength=2.520; - ACE_bulletMass=745; + ACE_caliber=12.979; + ACE_bulletLength=64.008; + ACE_bulletMass=48.276; 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.63}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={820}; - ACE_barrelLengths[]={28.7}; + ACE_barrelLengths[]={728.98}; }; class B_45ACP_Ball : BulletBase { airFriction=-0.0007182; typicalSpeed=250; - ACE_caliber=0.452; - ACE_bulletLength=0.68; - ACE_bulletMass=230; + ACE_caliber=11.481; + ACE_bulletLength=17.272; + ACE_bulletMass=14.904; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class TMR_B_762x51_M118LR : B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.505, 0.496, 0.485, 0.485, 0.485}; ACE_velocityBoundaries[]={853, 549, 549, 549}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={750, 780, 790, 794}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class RH_50_AE_Ball: BulletBase { - ACE_caliber=0.5; - ACE_bulletLength=1.110; - ACE_bulletMass=325; + ACE_caliber=12.7; + ACE_bulletLength=28.194; + ACE_bulletMass=21.06; 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.228}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={360, 398, 420}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_454_Casull: BulletBase { - ACE_caliber=0.452; - ACE_bulletLength=0.895; - ACE_bulletMass=325; + ACE_caliber=11.481; + ACE_bulletLength=22.733; + ACE_bulletMass=21.06; 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.171}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={450, 490, 500}; - ACE_barrelLengths[]={4, 7.5, 9}; + ACE_barrelLengths[]={101.6, 190.5, 228.6}; }; class RH_32ACP: BulletBase { - ACE_caliber=0.3125; - ACE_bulletLength=0.610; - ACE_bulletMass=65; + ACE_caliber=7.938; + ACE_bulletLength=15.494; + ACE_bulletMass=4.212; 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.118}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={282, 300, 320}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_45ACP: BulletBase { - ACE_caliber=0.452; - ACE_bulletLength=0.68; - ACE_bulletMass=230; + ACE_caliber=11.481; + ACE_bulletLength=17.272; + ACE_bulletMass=14.904; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_B_40SW: BulletBase { - ACE_caliber=0.4; - ACE_bulletLength=0.447; - ACE_bulletMass=135; + ACE_caliber=10.16; + ACE_bulletLength=11.354; + ACE_bulletMass=8.748; 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.105, 0.115, 0.120, 0.105}; ACE_velocityBoundaries[]={365, 305, 259}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={360, 380, 400}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_44mag_ball: BulletBase { - ACE_caliber=0.429; - ACE_bulletLength=0.804; - ACE_bulletMass=200; + ACE_caliber=10.897; + ACE_bulletLength=20.422; + ACE_bulletMass=12.96; 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}; + ACE_barrelLengths[]={101.6, 190.5, 228.6}; }; class RH_357mag_ball: BulletBase { - ACE_caliber=0.357; - ACE_bulletLength=0.541; - ACE_bulletMass=125; + ACE_caliber=9.068; + ACE_bulletLength=13.741; + ACE_bulletMass=8.1; 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.148}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={490, 510, 535}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_762x25: BulletBase { - ACE_caliber=0.310; - ACE_bulletLength=0.5455; - ACE_bulletMass=86; + ACE_caliber=7.874; + ACE_bulletLength=13.856; + ACE_bulletMass=5.5728; 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.17}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={360, 380, 400}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_9x18_Ball: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class RH_B_9x19_Ball: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_B_22LR_SD: BulletBase { - ACE_caliber=0.223; - ACE_bulletLength=0.45; - ACE_bulletMass=38; + ACE_caliber=5.664; + ACE_bulletLength=11.43; + ACE_bulletMass=2.4624; 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.111}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={330, 340, 360}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_57x28mm: BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.495; - ACE_bulletMass=28; + ACE_caliber=5.69; + ACE_bulletLength=12.573; + ACE_bulletMass=1.8144; 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}; + ACE_barrelLengths[]={101.6, 152.4, 262.89}; }; class RH_9x19_B_M822: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_9x19_B_HP: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_9x19_B_HPSB: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.603; - ACE_bulletMass=147; + ACE_caliber=9.017; + ACE_bulletLength=15.316; + ACE_bulletMass=9.5256; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_B_6x35: BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.445; - ACE_bulletMass=65; + ACE_caliber=5.69; + ACE_bulletLength=11.303; + ACE_bulletMass=4.212; 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.26}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={730, 750, 760}; - ACE_barrelLengths[]={8, 10, 12}; + ACE_barrelLengths[]={203.2, 254.0, 304.8}; }; class RH_556x45_B_M855A1 : B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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.152}; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class RH_556x45_B_Mk262 : B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class RH_556x45_B_Mk318 : B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class RH_68x43_B_FMJ: B_65x39_Caseless { - ACE_caliber=0.277; - ACE_bulletLength=0.959; - ACE_bulletMass=115; + ACE_caliber=7.036; + ACE_bulletLength=24.359; + ACE_bulletMass=7.452; 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}; + ACE_barrelLengths[]={304.8, 406.4, 508.0, 609.6}; }; class RH_68x43_B_Match: B_65x39_Caseless { - ACE_caliber=0.277; - ACE_bulletLength=1.250; - ACE_bulletMass=135; + ACE_caliber=7.036; + ACE_bulletLength=31.75; + ACE_bulletMass=8.748; 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}; + ACE_barrelLengths[]={304.8, 406.4, 508.0, 609.6}; }; class RH_762x35_B_FMJ: B_65x39_Caseless { - ACE_caliber=0.308; - ACE_bulletLength=1.118; - ACE_bulletMass=147; + ACE_caliber=7.823; + ACE_bulletLength=28.397; + ACE_bulletMass=9.5256; 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}; + ACE_barrelLengths[]={152.4, 406.4, 508.0}; }; class RH_762x35_B_Match: B_65x39_Caseless { - ACE_caliber=0.308; - ACE_bulletLength=1.153; - ACE_bulletMass=125; + ACE_caliber=7.823; + ACE_bulletLength=29.286; + ACE_bulletMass=8.1; 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[]={590, 650, 665}; - ACE_barrelLengths[]={6, 16, 20}; + ACE_barrelLengths[]={152.4, 406.4, 508.0}; }; class RH_762x35_B_MSB: B_65x39_Caseless { - ACE_caliber=0.308; - ACE_bulletLength=1.489; - ACE_bulletMass=220; + ACE_caliber=7.823; + ACE_bulletLength=37.821; + ACE_bulletMass=14.256; 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}; + ACE_barrelLengths[]={228.6, 406.4, 508.0}; }; class RH_762x51_B_M80A1 : B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class RH_762x51_B_Mk316LR : B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class RH_762x51_B_Mk319 : B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.074; - ACE_bulletMass=130; + ACE_caliber=7.823; + ACE_bulletLength=27.28; + ACE_bulletMass=8.424; 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.277}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={838, 892, 920}; - ACE_barrelLengths[]={13, 16, 20}; + ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; class RH_762x51_B_LFMJSB: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.340; - ACE_bulletMass=200; + ACE_caliber=7.823; + ACE_bulletLength=34.036; + ACE_bulletMass=12.96; 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.252}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={305, 325, 335, 340}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class HLC_556NATO_SOST: BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class HLC_556NATO_SPR: BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class HLC_556NATO_EPR: BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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.152}; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class HLC_300Blackout_Ball: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.118; - ACE_bulletMass=147; + ACE_caliber=7.823; + ACE_bulletLength=28.397; + ACE_bulletMass=9.5256; 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}; + ACE_barrelLengths[]={152.4, 406.4, 508.0}; }; class HLC_300Blackout_SMK: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.489; - ACE_bulletMass=220; + ACE_caliber=7.823; + ACE_bulletLength=37.821; + ACE_bulletMass=14.256; 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}; + ACE_barrelLengths[]={228.6, 406.4, 508.0}; }; class HLC_762x51_BTSub: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.340; - ACE_bulletMass=200; + ACE_caliber=7.823; + ACE_bulletLength=34.036; + ACE_bulletMass=12.96; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class HLC_762x54_ball: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class HLC_762x54_tracer: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class HLC_303Brit_B: BulletBase { - ACE_caliber=0.311; - ACE_bulletLength=1.227; - ACE_bulletMass=174; + ACE_caliber=7.899; + ACE_bulletLength=31.166; + ACE_bulletMass=11.2752; 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}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class HLC_792x57_Ball: BulletBase { - ACE_caliber=0.318; - ACE_bulletLength=1.128; - ACE_bulletMass=196; + ACE_caliber=8.077; + ACE_bulletLength=28.651; + ACE_bulletMass=12.7008; 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}; + ACE_barrelLengths[]={508.0, 599.948, 660.4}; }; class FH_545x39_Ball: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class FH_545x39_7u1: FH_545x39_Ball { - ACE_bulletMass=80; + ACE_bulletMass=5.184; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class HLC_9x19_Ball: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class HLC_9x19_GoldDot: HLC_9x19_Ball { @@ -1155,1647 +1155,1647 @@ class CfgAmmo }; class HLC_10mm_FMJ: HLC_9x19_Ball { - ACE_caliber=0.5; - ACE_bulletLength=0.764; - ACE_bulletMass=165; + ACE_caliber=12.7; + ACE_bulletLength=19.406; + ACE_bulletMass=10.692; 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}; + ACE_barrelLengths[]={101.6, 117.094, 228.6}; }; class HLC_9x19_M882_SMG: HLC_9x19_Ball { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class M_mas_545x39_Ball_7N6M : BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class M_mas_545x39_Ball_7T3M : BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_mas_556x45_Ball_Mk262 : B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class B_mas_9x18_Ball_57N181S : BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class B_mas_9x21p_Ball: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class B_mas_9x21_Ball: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class B_mas_9x21d_Ball: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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[]={210, 250, 285}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class B_mas_765x17_Ball: BulletBase { - ACE_caliber=0.3125; - ACE_bulletLength=0.610; - ACE_bulletMass=65; + ACE_caliber=7.938; + ACE_bulletLength=15.494; + ACE_bulletMass=4.212; 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.118}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={282, 300, 320}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class B_mas_762x39_Ball: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_mas_762x39_Ball_T: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=117; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.5816; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_mas_762x51_Ball_M118LR : B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.505, 0.496, 0.485, 0.485, 0.485}; ACE_velocityBoundaries[]={853, 549, 549, 549}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={750, 780, 790, 794}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class B_mas_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.353; - ACE_bulletMass=190; + ACE_caliber=7.823; + ACE_bulletLength=34.366; + ACE_bulletMass=12.312; 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.268}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={865, 900, 924}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_mas_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.489; - ACE_bulletMass=220; + ACE_caliber=7.823; + ACE_bulletLength=37.821; + ACE_bulletMass=14.256; 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.310}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={820, 867, 900}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_mas_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.602; - ACE_bulletMass=230; + ACE_caliber=7.823; + ACE_bulletLength=40.691; + ACE_bulletMass=14.904; 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.368}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={800, 853, 884}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_mas_762x54_Ball : BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class B_mas_762x54_Ball_T : BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class BWA3_B_762x51_Ball_LR : BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.505, 0.496, 0.485, 0.485, 0.485}; ACE_velocityBoundaries[]={853, 549, 549, 549}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={750, 780, 790, 794}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class BWA3_B_762x51_Ball_SD : BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.2}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={300, 340}; - ACE_barrelLengths[]={16, 24}; + ACE_barrelLengths[]={406.4, 609.6}; }; class BWA3_B_46x30_Ball : BulletBase { - ACE_caliber=0.193; - ACE_bulletLength=0.512; - ACE_bulletMass=31; + ACE_caliber=4.902; + ACE_bulletLength=13.005; + ACE_bulletMass=2.0088; 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.1455}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={680, 720, 730, 740}; - ACE_barrelLengths[]={4, 7, 9, 12}; + ACE_barrelLengths[]={101.6, 177.8, 228.6, 304.8}; }; class Trixie_338_Ball : BulletBase { - ACE_caliber=0.338; - ACE_bulletLength=1.70; - ACE_bulletMass=300; + ACE_caliber=8.585; + ACE_bulletLength=43.18; + ACE_bulletMass=19.44; 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.381}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={820, 826, 830}; - ACE_barrelLengths[]={24, 26.5, 28}; + ACE_barrelLengths[]={609.6, 673.1, 711.2}; }; class Trixie_303_Ball : BulletBase { - ACE_caliber=0.311; - ACE_bulletLength=1.227; - ACE_bulletMass=174; + ACE_caliber=7.899; + ACE_bulletLength=31.166; + ACE_bulletMass=11.2752; 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}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class rhs_ammo_556x45_Mk318_Ball : BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class rhs_ammo_556x45_Mk262_Ball : BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class rhsammo_762x51_Ball : BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class rhs_B_545x39_Ball : BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class rhs_B_545x39_Ball_Tracer_Green : BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class rhs_ammo_762x51_M118_Special_Ball : BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.243}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={750, 780, 790, 794}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class rhs_B_762x54_Ball : BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class rhs_B_762x54_Ball_Tracer_Green : BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class rhs_B_762x39_Ball : BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class rhs_B_762x39_Tracer : BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=117; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.5816; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class rhs_ammo_762x51_M80_Ball : BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class rhsusf_B_300winmag : BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.489; - ACE_bulletMass=220; + ACE_caliber=7.823; + ACE_bulletLength=37.821; + ACE_bulletMass=14.256; 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.310}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={847, 867, 877}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class R3F_9x19_Ball: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class R3F_556x45_Ball: BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class R3F_762x51_Ball: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class R3F_762x51_Ball2: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.505, 0.496, 0.485, 0.485, 0.485}; ACE_velocityBoundaries[]={853, 549, 549, 549}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={750, 780, 790, 794}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class R3F_127x99_Ball: BulletBase { - ACE_caliber=0.510; - ACE_bulletLength=2.310; - ACE_bulletMass=647; + ACE_caliber=12.954; + ACE_bulletLength=58.674; + ACE_bulletMass=41.9256; 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[]={853}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class R3F_127x99_Ball2: BulletBase { - ACE_caliber=0.510; - ACE_bulletLength=2.310; - ACE_bulletMass=647; + ACE_caliber=12.954; + ACE_bulletLength=58.674; + ACE_bulletMass=41.9256; 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[]={853}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class CUP_B_545x39_Ball: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_Green: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_Red: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_White: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_Yellow: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_762x39_Ball: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_762x39_Ball_Tracer_Green: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=117; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.5816; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_762x39mm_KLT: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_9x18_Ball: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_Tracer_Green: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_Tracer_Red: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_Tracer_Yellow: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_White_Tracer: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x19_Ball: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class CUP_B_762x51_noTracer: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Red_Tracer_3RndBurst: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_White_Tracer_3RndBurst: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_303_Ball: BulletBase { - ACE_caliber=0.311; - ACE_bulletLength=1.227; - ACE_bulletMass=174; + ACE_caliber=7.899; + ACE_bulletLength=31.166; + ACE_bulletMass=11.2752; 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}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class CUP_B_127x107_Ball_Green_Tracer: BulletBase { - ACE_caliber=0.511; - ACE_bulletLength=2.520; - ACE_bulletMass=745; + ACE_caliber=12.979; + ACE_bulletLength=64.008; + ACE_bulletMass=48.276; 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.63}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={820}; - ACE_barrelLengths[]={28.7}; + ACE_barrelLengths[]={728.98}; }; class CUP_B_127x108_Ball_Green_Tracer: BulletBase { - ACE_caliber=0.511; - ACE_bulletLength=2.520; - ACE_bulletMass=745; + ACE_caliber=12.979; + ACE_bulletLength=64.008; + ACE_bulletMass=48.276; 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.63}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={820}; - ACE_barrelLengths[]={28.7}; + ACE_barrelLengths[]={728.98}; }; class CUP_B_762x54_Ball_White_Tracer: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x54_Ball_Red_Tracer: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x54_Ball_Green_Tracer: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x54_Ball_Yellow_Tracer: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_9x39_SP5: BulletBase { - ACE_caliber=0.364; - ACE_bulletLength=1.24; - ACE_bulletMass=250; + ACE_caliber=9.246; + ACE_bulletLength=31.496; + ACE_bulletMass=16.2; 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.275}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={280, 300, 320}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_762x51_Tracer_Green: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Tracer_Red: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Tracer_Yellow: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Tracer_White: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class B_127x107_Ball: BulletBase { - ACE_caliber=0.511; - ACE_bulletLength=2.520; - ACE_bulletMass=745; + ACE_caliber=12.979; + ACE_bulletLength=64.008; + ACE_bulletMass=48.276; 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.63}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={820}; - ACE_barrelLengths[]={28.7}; + ACE_barrelLengths[]={728.98}; }; class CUP_B_9x18_SD: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 340}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_765x17_Ball: BulletBase { - ACE_caliber=0.3125; - ACE_bulletLength=0.610; - ACE_bulletMass=65; + ACE_caliber=7.938; + ACE_bulletLength=15.494; + ACE_bulletMass=4.212; 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.118}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={282, 300, 320}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class CUP_B_145x115_AP_Green_Tracer: BulletBase { - ACE_caliber=0.586; - ACE_bulletLength=2.00; - ACE_bulletMass=1010; + ACE_caliber=14.884; + ACE_bulletLength=50.8; + ACE_bulletMass=65.448; 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.620}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={1000}; - ACE_barrelLengths[]={53}; + ACE_barrelLengths[]={1346.2}; }; class CUP_B_127x99_Ball_White_Tracer: BulletBase { - ACE_caliber=0.510; - ACE_bulletLength=2.310; - ACE_bulletMass=647; + ACE_caliber=12.954; + ACE_bulletLength=58.674; + ACE_bulletMass=41.9256; 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[]={853}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class CUP_B_86x70_Ball_noTracer: BulletBase { - ACE_caliber=0.338; - ACE_bulletLength=1.70; - ACE_bulletMass=300; + ACE_caliber=8.585; + ACE_bulletLength=43.18; + ACE_bulletMass=19.44; 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.381}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={820, 826, 830}; - ACE_barrelLengths[]={24, 26.5, 28}; + ACE_barrelLengths[]={609.6, 673.1, 711.2}; }; class VTN_9x18_Ball_FMJ: B_9x21_Ball { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class VTN_9x18_Ball_SC: VTN_9x18_Ball_FMJ { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class VTN_9x18_Ball_TRC: VTN_9x18_Ball_FMJ { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class VTN_9x18_Ball_AP1: VTN_9x18_Ball_FMJ { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class VTN_9x18_Ball_AP2: VTN_9x18_Ball_FMJ { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class VTN_9x18_Ball_PRS: VTN_9x18_Ball_FMJ { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class VTN_9x19_Ball_SC: VTN_9x18_Ball_FMJ { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class VTN_9x19_Ball_TRC: VTN_9x19_Ball_SC { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class VTN_9x19_Ball_AP: VTN_9x19_Ball_SC { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class VTN_9x19_Ball_PRS: VTN_9x19_Ball_SC { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class VTN_9x39_Ball_SC: B_9x21_Ball { - ACE_caliber=0.364; - ACE_bulletLength=1.24; - ACE_bulletMass=250; + ACE_caliber=9.246; + ACE_bulletLength=31.496; + ACE_bulletMass=16.2; 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.275}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={280, 300, 320}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_9x39_Ball_AP: VTN_9x39_Ball_SC { - ACE_caliber=0.364; - ACE_bulletLength=1.24; - ACE_bulletMass=250; + ACE_caliber=9.246; + ACE_bulletLength=31.496; + ACE_bulletMass=16.2; 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.275}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={280, 300, 320}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_545x39_Ball_SC: B_556x45_Ball { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_545x39_Ball_TRC: VTN_545x39_Ball_SC { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_545x39_Ball_AP: VTN_545x39_Ball_TRC { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_545x39_Ball_AP2: VTN_545x39_Ball_AP { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_545x39_Ball_SS: VTN_545x39_Ball_SC { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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.168}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=7; ACE_muzzleVelocities[]={300, 320, 340}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_762x39_Ball_SC: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_762x39_Ball_TRC: VTN_762x39_Ball_SC { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=117; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.5816; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_762x39_Ball_AP: VTN_762x39_Ball_TRC { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_762x39_Ball_INC: VTN_762x39_Ball_AP { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_762x39_Ball_API: VTN_762x39_Ball_INC { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_762x39_Ball_SS: VTN_762x39_Ball_SC { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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.275}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={300, 320, 340}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_762x41_Ball_SS: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=0.53; - ACE_bulletMass=143; + ACE_caliber=7.823; + ACE_bulletLength=13.462; + ACE_bulletMass=9.2664; 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.275}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={200, 210, 220}; - ACE_barrelLengths[]={4, 6, 8}; + ACE_barrelLengths[]={101.6, 152.4, 203.2}; }; class VTN_762x54_Ball_SC: VTN_762x39_Ball_SC { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class VTN_762x54_Ball_TRC: VTN_762x54_Ball_SC { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class VTN_762x54_Ball_AP: VTN_762x54_Ball_TRC { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class VTN_762x54_Ball_INC: VTN_762x54_Ball_AP { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class VTN_762x54_Ball_API: VTN_762x54_Ball_INC { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class VTN_145x114_Ball_APT: B_127x108_Ball { - ACE_caliber=0.586; - ACE_bulletLength=2.00; - ACE_bulletMass=1010; + ACE_caliber=14.884; + ACE_bulletLength=50.8; + ACE_bulletMass=65.448; 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.620}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={1000}; - ACE_barrelLengths[]={53}; + ACE_barrelLengths[]={1346.2}; }; class VTN_6mm_BB: B_65x39_Caseless { - ACE_caliber=0.24; - ACE_bulletLength=0.24; - ACE_bulletMass=6; + ACE_caliber=6.096; + ACE_bulletLength=6.096; + ACE_bulletMass=0.3888; ACE_ammoTempMuzzleVelocityShifts[]={}; ACE_ballisticCoefficients[]={}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={100}; - ACE_barrelLengths[]={15}; + ACE_barrelLengths[]={381.0}; }; class VTN_9x19_Ball_FMJ: B_9x21_Ball { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class VTN_556x45_Ball_FMJ: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class VTN_556x45_Ball_TRC: VTN_556x45_Ball_FMJ { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class VTN_556x45_Ball_TRCN: VTN_556x45_Ball_TRC { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class VTN_556x45_Ball_SC: VTN_556x45_Ball_FMJ { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class VTN_556x45_Ball_AP: VTN_556x45_Ball_TRC { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class VTN_556x45_Ball_INC: VTN_556x45_Ball_AP { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class VTN_556x45_Ball_LR: VTN_556x45_Ball_FMJ { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class VTN_556x45_Ball_SS: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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.151}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=7; ACE_muzzleVelocities[]={300, 320, 340}; - ACE_barrelLengths[]={10, 20.0, 24.0}; + ACE_barrelLengths[]={254.0, 508.0, 609.6}; }; class VTN_762x51_Ball_SC: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class VTN_762x51_Ball_TRC: VTN_762x51_Ball_SC { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class VTN_762x51_Ball_TRCN: VTN_762x51_Ball_TRC { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class VTN_762x51_Ball_AP: VTN_762x51_Ball_TRC { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class VTN_762x51_Ball_LR: VTN_762x51_Ball_SC { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.243}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={750, 780, 790, 794}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class VTN_1143x23_Ball_FMJ: B_408_Ball { - ACE_caliber=0.452; - ACE_bulletLength=0.68; - ACE_bulletMass=230; + ACE_caliber=11.481; + ACE_bulletLength=17.272; + ACE_bulletMass=14.904; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class VTN_1143x23_Ball_HP: VTN_1143x23_Ball_FMJ { - ACE_caliber=0.452; - ACE_bulletLength=0.68; - ACE_bulletMass=230; + ACE_caliber=11.481; + ACE_bulletLength=17.272; + ACE_bulletMass=14.904; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class VTN_1143x23_Ball_JHP: VTN_1143x23_Ball_FMJ { - ACE_caliber=0.452; - ACE_bulletLength=0.68; - ACE_bulletMass=230; + ACE_caliber=11.481; + ACE_bulletLength=17.272; + ACE_bulletMass=14.904; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class VTN_762x39_Ball_FMJ: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class VTN_45_Pellet: B_762x51_Ball { - ACE_caliber=0.22; - ACE_bulletLength=0.23; - ACE_bulletMass=3; + ACE_caliber=5.588; + ACE_bulletLength=5.842; + ACE_bulletMass=0.1944; ACE_ammoTempMuzzleVelocityShifts[]={}; ACE_ballisticCoefficients[]={}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={100, 138, 150}; - ACE_barrelLengths[]={5, 10, 16}; + ACE_barrelLengths[]={127.0, 254.0, 406.4}; }; }; \ No newline at end of file diff --git a/extras/CfgWeaponsReference.hpp b/extras/CfgWeaponsReference.hpp index 4821d53813..15df01e306 100644 --- a/extras/CfgWeaponsReference.hpp +++ b/extras/CfgWeaponsReference.hpp @@ -27,1868 +27,1868 @@ class CfgWeapons class MMG_02_base_F; class hgun_P07_F : Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=4; + ACE_barrelTwist=254.0; + ACE_barrelLength=101.6; }; class hgun_Rook40_F : Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=4.4; + ACE_barrelTwist=254.0; + ACE_barrelLength=111.76; }; class hgun_Pistol_heavy_01_F : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=114.3; }; class hgun_Pistol_heavy_02_F : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=3; + ACE_barrelTwist=406.4; + ACE_barrelLength=76.2; }; class hgun_ACPC2_F : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=5; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.0; }; class hgun_PDW2000_F : PDW2000_Base_F { - ACE_barrelTwist=9; - ACE_barrelLength=7; + ACE_barrelTwist=228.6; + ACE_barrelLength=177.8; }; class arifle_Katiba_F : arifle_Katiba_Base_F { - ACE_barrelTwist=8; - ACE_barrelLength=28.7; + ACE_barrelTwist=203.2; + ACE_barrelLength=728.98; }; class arifle_Katiba_C_F : arifle_Katiba_Base_F { - ACE_barrelTwist=8; - ACE_barrelLength=26.8; + ACE_barrelTwist=203.2; + ACE_barrelLength=680.72; }; class arifle_Katiba_GL_F : arifle_Katiba_Base_F { - ACE_barrelTwist=8; - ACE_barrelLength=28.7; + ACE_barrelTwist=203.2; + ACE_barrelLength=728.98; }; class arifle_MX_F: arifle_MX_Base_F { - ACE_barrelTwist=9; - ACE_barrelLength=14.5; + ACE_barrelTwist=228.6; + ACE_barrelLength=368.3; }; class arifle_MX_GL_F: arifle_MX_Base_F { - ACE_barrelTwist=9; - ACE_barrelLength=14.5; + ACE_barrelTwist=228.6; + ACE_barrelLength=368.3; }; class arifle_MX_SW_F: arifle_MX_Base_F { - ACE_barrelTwist=9; - ACE_barrelLength=16.0; + ACE_barrelTwist=228.6; + ACE_barrelLength=406.4; }; class arifle_MXC_F: arifle_MX_Base_F { - ACE_barrelTwist=8; - ACE_barrelLength=10.5; + ACE_barrelTwist=203.2; + ACE_barrelLength=266.7; }; class arifle_MXM_F: arifle_MX_Base_F { - ACE_barrelTwist=9; - ACE_barrelLength=18; + ACE_barrelTwist=228.6; + ACE_barrelLength=457.2; }; class arifle_SDAR_F : SDAR_base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=18; + ACE_barrelTwist=285.75; + ACE_barrelLength=457.2; }; class SMG_02_F : SMG_02_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=7.7; + ACE_barrelTwist=254.0; + ACE_barrelLength=195.58; }; class arifle_TRG20_F : Tavor_base_F { - ACE_barrelTwist=7; - ACE_barrelLength=15; + ACE_barrelTwist=177.8; + ACE_barrelLength=381.0; }; class arifle_TRG21_F : Tavor_base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18.1; + ACE_barrelTwist=177.8; + ACE_barrelLength=459.74; }; class LMG_Zafir_F : Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=18.1; + ACE_barrelTwist=304.8; + ACE_barrelLength=459.74; }; class arifle_Mk20_F : Mk20_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=17.4; + ACE_barrelTwist=177.8; + ACE_barrelLength=441.96; }; class arifle_Mk20C_F : Mk20_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16; + ACE_barrelTwist=177.8; + ACE_barrelLength=406.4; }; class arifle_Mk20_GL_F : Mk20_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16; + ACE_barrelTwist=177.8; + ACE_barrelLength=406.4; }; class SMG_01_F : SMG_01_Base { - ACE_barrelTwist=16; - ACE_barrelLength=5.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=139.7; }; class srifle_DMR_01_F : DMR_01_base_F { - ACE_barrelTwist=9.5; - ACE_barrelLength=24; + ACE_barrelTwist=241.3; + ACE_barrelLength=609.6; }; class srifle_EBR_F : EBR_base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24; + ACE_barrelTwist=304.8; + ACE_barrelLength=609.6; }; class LMG_Mk200_F : Rifle_Long_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=12.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; class srifle_LRR_F : LRR_base_F { - ACE_barrelTwist=13; - ACE_barrelLength=29; + ACE_barrelTwist=330.2; + ACE_barrelLength=736.6; }; class srifle_GM6_F : GM6_base_F { - ACE_barrelTwist=15; - ACE_barrelLength=43.3; + ACE_barrelTwist=381.0; + ACE_barrelLength=1099.82; }; class srifle_DMR_02_F: DMR_02_base_F { - ACE_barrelTwist=10; - ACE_barrelLength=26; + ACE_barrelTwist=254.0; + ACE_barrelLength=660.4; }; class srifle_DMR_03_F: DMR_03_base_F { - ACE_barrelTwist=10; - ACE_barrelLength=20; + ACE_barrelTwist=254.0; + ACE_barrelLength=508.0; }; class srifle_DMR_04_F: DMR_04_base_F { - ACE_barrelTwist=8; - ACE_barrelLength=17.72; + ACE_barrelTwist=203.2; + ACE_barrelLength=450.088; }; class srifle_DMR_05_blk_F: DMR_05_base_F { - ACE_barrelTwist=14.17; - ACE_barrelLength=24.41; + ACE_barrelTwist=359.918; + ACE_barrelLength=620.014; }; class srifle_DMR_06_camo_F: DMR_06_base_F { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class MMG_01_hex_F: MMG_01_base_F { - ACE_barrelTwist=14.17; - ACE_barrelLength=21.65; + ACE_barrelTwist=359.918; + ACE_barrelLength=549.91; }; class MMG_02_camo_F: MMG_02_base_F { - ACE_barrelTwist=9.25; - ACE_barrelLength=24; + ACE_barrelTwist=234.95; + ACE_barrelLength=609.6; }; class HMG_M2 : HMG_127 { - ACE_barrelTwist=12; - ACE_barrelLength=45; + ACE_barrelTwist=304.8; + ACE_barrelLength=1143.0; }; class RH_deagle : Pistol_Base_F { - ACE_barrelTwist=19; - ACE_barrelLength=6; + ACE_barrelTwist=482.6; + ACE_barrelLength=152.4; }; class RH_sw659 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=7.44; + ACE_barrelTwist=248.92; + ACE_barrelLength=188.976; }; class RH_usp : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.41; + ACE_barrelTwist=406.4; + ACE_barrelLength=112.014; }; class RH_uspm : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=6; + ACE_barrelTwist=406.4; + ACE_barrelLength=152.4; }; class RH_mak : Pistol_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=3.68; + ACE_barrelTwist=240.03; + ACE_barrelLength=93.472; }; class RH_m1911 : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=5; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.0; }; class RH_kimber : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=5; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.0; }; class RH_m9 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.9; + ACE_barrelTwist=248.92; + ACE_barrelLength=124.46; }; class RH_vz61 : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=114.3; }; class RH_tec9 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=5; + ACE_barrelTwist=248.92; + ACE_barrelLength=127.0; }; class RH_muzi : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=5; + ACE_barrelTwist=248.92; + ACE_barrelLength=127.0; }; class RH_g18 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.49; + ACE_barrelTwist=248.92; + ACE_barrelLength=114.046; }; class RH_g17 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.49; + ACE_barrelTwist=248.92; + ACE_barrelLength=114.046; }; class RH_tt33 : Pistol_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=4.6; + ACE_barrelTwist=240.03; + ACE_barrelLength=116.84; }; class RH_mk2 : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4; + ACE_barrelTwist=406.4; + ACE_barrelLength=101.6; }; class RH_p226 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.4; + ACE_barrelTwist=248.92; + ACE_barrelLength=111.76; }; class RH_g19 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4; + ACE_barrelTwist=248.92; + ACE_barrelLength=101.6; }; class RH_gsh18 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.1; + ACE_barrelTwist=248.92; + ACE_barrelLength=104.14; }; class RH_mateba : Pistol_Base_F { - ACE_barrelTwist=14; - ACE_barrelLength=6; + ACE_barrelTwist=355.6; + ACE_barrelLength=152.4; }; class RH_python : Pistol_Base_F { - ACE_barrelTwist=14; - ACE_barrelLength=6; + ACE_barrelTwist=355.6; + ACE_barrelLength=152.4; }; class RH_bull : Pistol_Base_F { - ACE_barrelTwist=24; - ACE_barrelLength=6.5; + ACE_barrelTwist=609.6; + ACE_barrelLength=165.1; }; class RH_ttracker : Pistol_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=4; + ACE_barrelTwist=304.8; + ACE_barrelLength=101.6; }; class RH_mp412 : Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=6; + ACE_barrelTwist=254.0; + ACE_barrelLength=152.4; }; class RH_fnp45 : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=114.3; }; class RH_fn57 : Pistol_Base_F { - ACE_barrelTwist=9.1; - ACE_barrelLength=4.8; + ACE_barrelTwist=231.14; + ACE_barrelLength=121.92; }; class RH_vp70 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.6; + ACE_barrelTwist=248.92; + ACE_barrelLength=116.84; }; class RH_cz75 : Pistol_Base_F { - ACE_barrelTwist=9.7; - ACE_barrelLength=4.7; + ACE_barrelTwist=246.38; + ACE_barrelLength=119.38; }; class RH_PDW : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=10; + ACE_barrelTwist=177.8; + ACE_barrelLength=254.0; }; class RH_hb : Rifle_Base_F { - ACE_barrelTwist=8; - ACE_barrelLength=6; + ACE_barrelTwist=203.2; + ACE_barrelLength=152.4; }; class RH_sbr9 : Rifle_Base_F { - ACE_barrelTwist=9.7; - ACE_barrelLength=9; + ACE_barrelTwist=246.38; + ACE_barrelLength=228.6; }; class RH_ar10 : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=20.8; + ACE_barrelTwist=285.75; + ACE_barrelLength=528.32; }; class RH_m4 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class RH_M4m : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=10.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=266.7; }; class RH_M4sbr : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=10.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=266.7; }; class RH_M16a1 : Rifle_Base_F { - ACE_barrelTwist=14; - ACE_barrelLength=20; + ACE_barrelTwist=355.6; + ACE_barrelLength=508.0; }; class RH_M16A2 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class RH_M16A3 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class RH_M16A4 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class RH_M16A6 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class RH_hk416 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class RH_hk416c : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=9; + ACE_barrelTwist=177.8; + ACE_barrelLength=228.6; }; class RH_hk416s : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=10.4; + ACE_barrelTwist=177.8; + ACE_barrelLength=264.16; }; class RH_m27iar : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=419.1; }; class RH_Mk12mod1 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18; + ACE_barrelTwist=177.8; + ACE_barrelLength=457.2; }; class RH_SAMR : Rifle_Base_F { - ACE_barrelTwist=7.7; - ACE_barrelLength=20; + ACE_barrelTwist=195.58; + ACE_barrelLength=508.0; }; class RH_m110 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=20; + ACE_barrelTwist=254.0; + ACE_barrelLength=508.0; }; class RH_mk11 : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=24; + ACE_barrelTwist=285.75; + ACE_barrelLength=609.6; }; class RH_sr25ec : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=20; + ACE_barrelTwist=285.75; + ACE_barrelLength=508.0; }; class hlc_rifle_ak74 : Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class hlc_rifle_aks74u : Rifle_Base_F { - ACE_barrelTwist=6.3; - ACE_barrelLength=8.3; + ACE_barrelTwist=160.02; + ACE_barrelLength=210.82; }; class hlc_rifle_ak47 : Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=16.3; + ACE_barrelTwist=240.03; + ACE_barrelLength=414.02; }; class hlc_rifle_akm : Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class hlc_rifle_rpk : Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=23.2; + ACE_barrelTwist=240.03; + ACE_barrelLength=589.28; }; class hlc_rifle_aek971 : Rifle_Base_F { - ACE_barrelTwist=9.5; - ACE_barrelLength=17; + ACE_barrelTwist=241.3; + ACE_barrelLength=431.8; }; class hlc_rifle_saiga12k : Rifle_Base_F { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=16.9; + ACE_barrelLength=429.26; }; class hlc_ar15_base : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=11.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=292.1; }; class hlc_rifle_bcmjack : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class hlc_rifle_Bushmaster300 : Rifle_Base_F { - ACE_barrelTwist=8; - ACE_barrelLength=16; + ACE_barrelTwist=203.2; + ACE_barrelLength=406.4; }; class hlc_rifle_SAMR : Rifle_Base_F { - ACE_barrelTwist=9; - ACE_barrelLength=16; + ACE_barrelTwist=228.6; + ACE_barrelLength=406.4; }; class hlc_rifle_honeybase : Rifle_Base_F { - ACE_barrelTwist=8; - ACE_barrelLength=6; + ACE_barrelTwist=203.2; + ACE_barrelLength=152.4; }; class hlc_rifle_SLRchopmod : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21; + ACE_barrelTwist=304.8; + ACE_barrelLength=533.4; }; class hlc_rifle_LAR : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21; + ACE_barrelTwist=304.8; + ACE_barrelLength=533.4; }; class hlc_rifle_c1A1 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21.7; + ACE_barrelTwist=304.8; + ACE_barrelLength=551.18; }; class hlc_rifle_FAL5061 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=18; + ACE_barrelTwist=304.8; + ACE_barrelLength=457.2; }; class hlc_rifle_STG58F : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21; + ACE_barrelTwist=304.8; + ACE_barrelLength=533.4; }; class hlc_rifle_SLR : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21.7; + ACE_barrelTwist=304.8; + ACE_barrelLength=551.18; }; class hlc_rifle_falosw : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=13; + ACE_barrelTwist=304.8; + ACE_barrelLength=330.2; }; class hlc_rifle_psg1 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=25.6; + ACE_barrelTwist=304.8; + ACE_barrelLength=650.24; }; class hlc_rifle_g3sg1 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=17.7; + ACE_barrelTwist=304.8; + ACE_barrelLength=449.58; }; class hlc_rifle_hk51 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=8.31; + ACE_barrelTwist=304.8; + ACE_barrelLength=211.074; }; class hlc_rifle_hk53 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=8.31; + ACE_barrelTwist=177.8; + ACE_barrelLength=211.074; }; class hlc_rifle_g3a3 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=17.7; + ACE_barrelTwist=304.8; + ACE_barrelLength=449.58; }; class hlc_M14_base : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class hlc_rifle_m14sopmod : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=18; + ACE_barrelTwist=304.8; + ACE_barrelLength=457.2; }; class hlc_lmg_M60E4 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=17; + ACE_barrelTwist=304.8; + ACE_barrelLength=431.8; }; class hlc_lmg_m60 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class hlc_smg_mp5k_PDW : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=4.5; + ACE_barrelTwist=254.0; + ACE_barrelLength=114.3; }; class hlc_smg_mp5a2 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=8.9; + ACE_barrelTwist=254.0; + ACE_barrelLength=226.06; }; class hlc_smg_mp5a4 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=8.9; + ACE_barrelTwist=254.0; + ACE_barrelLength=226.06; }; class hlc_smg_mp5n : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=8.9; + ACE_barrelTwist=254.0; + ACE_barrelLength=226.06; }; class hlc_smg_mp5sd5 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=5.7; + ACE_barrelTwist=254.0; + ACE_barrelLength=144.78; }; class hlc_smg_mp5sd6 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=5.7; + ACE_barrelTwist=254.0; + ACE_barrelLength=144.78; }; class hlc_smg_9mmar : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=8.9; + ACE_barrelTwist=254.0; + ACE_barrelLength=226.06; }; class hlc_smg_mp510 : Rifle_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=8.9; + ACE_barrelTwist=381.0; + ACE_barrelLength=226.06; }; class hlc_smg_mp5a3 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=8.9; + ACE_barrelTwist=254.0; + ACE_barrelLength=226.06; }; class hgun_mas_usp_F: Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.41; + ACE_barrelTwist=406.4; + ACE_barrelLength=112.014; }; class hgun_mas_m23_F: Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=5.87; + ACE_barrelTwist=406.4; + ACE_barrelLength=149.098; }; class hgun_mas_acp_F: Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=5.03; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.762; }; class hgun_mas_m9_F: Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=4.9; + ACE_barrelTwist=254.0; + ACE_barrelLength=124.46; }; class hgun_mas_bhp_F: Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=4.7; + ACE_barrelTwist=254.0; + ACE_barrelLength=119.38; }; class hgun_mas_glock_F: Pistol_Base_F { - ACE_barrelTwist=9.84; - ACE_barrelLength=4.48; + ACE_barrelTwist=249.936; + ACE_barrelLength=113.792; }; class hgun_mas_glocksf_F: Pistol_Base_F { - ACE_barrelTwist=15.75; - ACE_barrelLength=4.60; + ACE_barrelTwist=400.05; + ACE_barrelLength=116.84; }; class hgun_mas_grach_F: Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=4.4; + ACE_barrelTwist=254.0; + ACE_barrelLength=111.76; }; class hgun_mas_mak_F: Pistol_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=3.68; + ACE_barrelTwist=240.03; + ACE_barrelLength=93.472; }; class hgun_mas_sa61_F: Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=114.3; }; class hgun_mas_uzi_F: Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=5.28; + ACE_barrelTwist=254.0; + ACE_barrelLength=134.112; }; class arifle_mas_mk16 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=13.8; + ACE_barrelTwist=177.8; + ACE_barrelLength=350.52; }; class arifle_mas_mk16_l : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18; + ACE_barrelTwist=177.8; + ACE_barrelLength=457.2; }; class arifle_mas_mk17 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=16; + ACE_barrelTwist=304.8; + ACE_barrelLength=406.4; }; class srifle_mas_m110 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=20; + ACE_barrelTwist=254.0; + ACE_barrelLength=508.0; }; class arifle_mas_ak_74m : Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.34; + ACE_barrelTwist=199.898; + ACE_barrelLength=415.036; }; class arifle_mas_ak_74m_gl : Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.34; + ACE_barrelTwist=199.898; + ACE_barrelLength=415.036; }; class srifle_mas_svd : Rifle_Base_F { - ACE_barrelTwist=9.4; - ACE_barrelLength=24.4; + ACE_barrelTwist=238.76; + ACE_barrelLength=619.76; }; class srifle_mas_m91 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=29; + ACE_barrelTwist=254.0; + ACE_barrelLength=736.6; }; class srifle_mas_ksvk : Rifle_Base_F { - ACE_barrelTwist=18; - ACE_barrelLength=39.37; + ACE_barrelTwist=457.2; + ACE_barrelLength=999.998; }; class LMG_mas_rpk_F : Rifle_Base_F { - ACE_barrelTwist=7.68; - ACE_barrelLength=23.2; + ACE_barrelTwist=195.072; + ACE_barrelLength=589.28; }; class LMG_mas_pkm_F : Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=25.4; + ACE_barrelTwist=240.03; + ACE_barrelLength=645.16; }; class arifle_mas_aks74u : Rifle_Base_F { - ACE_barrelTwist=6.3; - ACE_barrelLength=8.3; + ACE_barrelTwist=160.02; + ACE_barrelLength=210.82; }; class arifle_mas_bizon : Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=9.1; + ACE_barrelTwist=240.03; + ACE_barrelLength=231.14; }; class arifle_mas_saiga : Rifle_Base_F { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=16.93; + ACE_barrelLength=430.022; }; class arifle_mas_hk416 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class arifle_mas_hk416_gl : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class arifle_mas_hk416c : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=9.0; + ACE_barrelTwist=177.8; + ACE_barrelLength=228.6; }; class arifle_mas_hk416_m203c : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=9.0; + ACE_barrelTwist=177.8; + ACE_barrelLength=228.6; }; class arifle_mas_hk417c : Rifle_Base_F { - ACE_barrelTwist=11; - ACE_barrelLength=13; + ACE_barrelTwist=279.4; + ACE_barrelLength=330.2; }; class arifle_mas_m4 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class arifle_mas_m4c : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=10.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=261.62; }; class arifle_mas_l119 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16; + ACE_barrelTwist=177.8; + ACE_barrelLength=406.4; }; class arifle_mas_l119_gl : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16; + ACE_barrelTwist=177.8; + ACE_barrelLength=406.4; }; class arifle_mas_l119_m203 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16; + ACE_barrelTwist=177.8; + ACE_barrelLength=406.4; }; class arifle_mas_m16 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class arifle_mas_m16_gl : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class srifle_mas_hk417 : Rifle_Base_F { - ACE_barrelTwist=11; - ACE_barrelLength=16.5; + ACE_barrelTwist=279.4; + ACE_barrelLength=419.1; }; class srifle_mas_sr25 : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=24; + ACE_barrelTwist=285.75; + ACE_barrelLength=609.6; }; class srifle_mas_ebr : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=18; + ACE_barrelTwist=304.8; + ACE_barrelLength=457.2; }; class srifle_mas_m24 : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=24; + ACE_barrelTwist=285.75; + ACE_barrelLength=609.6; }; class arifle_mas_mp5 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=8.9; + ACE_barrelTwist=254.0; + ACE_barrelLength=226.06; }; class arifle_mas_mp5sd : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=5.7; + ACE_barrelTwist=254.0; + ACE_barrelLength=144.78; }; class srifle_mas_m107 : Rifle_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=29; + ACE_barrelTwist=381.0; + ACE_barrelLength=736.6; }; class LMG_mas_M249_F : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=414.02; }; class LMG_mas_M249a_F : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18; + ACE_barrelTwist=177.8; + ACE_barrelLength=457.2; }; class LMG_mas_mk48_F : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=19.75; + ACE_barrelTwist=304.8; + ACE_barrelLength=501.65; }; class LMG_mas_m240_F : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=629.92; }; class LMG_mas_mg3_F : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=22.2; + ACE_barrelTwist=304.8; + ACE_barrelLength=563.88; }; class arifle_mas_g3 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=17.7; + ACE_barrelTwist=304.8; + ACE_barrelLength=449.58; }; class arifle_mas_g3_m203 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=17.7; + ACE_barrelTwist=304.8; + ACE_barrelLength=449.58; }; class arifle_mas_fal : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21; + ACE_barrelTwist=304.8; + ACE_barrelLength=533.4; }; class arifle_mas_fal_m203 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21; + ACE_barrelTwist=304.8; + ACE_barrelLength=533.4; }; class arifle_mas_m1014 : Rifle_Base_F { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=18.5; + ACE_barrelLength=469.9; }; class BWA3_P8 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.25; + ACE_barrelTwist=248.92; + ACE_barrelLength=107.95; }; class BWA3_MP7 : Pistol_Base_F { - ACE_barrelTwist=6.3; - ACE_barrelLength=7.1; + ACE_barrelTwist=160.02; + ACE_barrelLength=180.34; }; class BWA3_G36 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18.9; + ACE_barrelTwist=177.8; + ACE_barrelLength=480.06; }; class BWA3_G36K : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=12.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; class BWA3_G28_Standard : Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=16.5; + ACE_barrelTwist=304.8; + ACE_barrelLength=419.1; }; class BWA3_G27 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=16; + ACE_barrelTwist=304.8; + ACE_barrelLength=406.4; }; class BWA3_MG4 : Rifle_Long_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18.9; + ACE_barrelTwist=177.8; + ACE_barrelLength=480.06; }; class BWA3_MG5 : Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21.6; + ACE_barrelTwist=304.8; + ACE_barrelLength=548.64; }; class BWA3_G82 : Rifle_Long_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=29; + ACE_barrelTwist=381.0; + ACE_barrelLength=736.6; }; class Trixie_L131A1 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.5; + ACE_barrelTwist=248.92; + ACE_barrelLength=114.3; }; class Trixie_XM8_Carbine : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=12.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; class Trixie_XM8_Compact : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=9; + ACE_barrelTwist=177.8; + ACE_barrelLength=228.6; }; class Trixie_XM8_SAW : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class Trixie_XM8_SAW_NB : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class Trixie_XM8_DMR : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class Trixie_XM8_DMR_NB : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class L129A1_base : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=16; + ACE_barrelTwist=254.0; + ACE_barrelLength=406.4; }; class Trixie_Enfield : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=25.2; + ACE_barrelTwist=254.0; + ACE_barrelLength=640.08; }; class Trixie_CZ550_Rail : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=23.622; + ACE_barrelTwist=304.8; + ACE_barrelLength=599.999; }; class Trixie_FNFAL_Rail : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21; + ACE_barrelTwist=304.8; + ACE_barrelLength=533.4; }; class Trixie_M110 : Rifle_Base_F { - ACE_barrelTwist=11; - ACE_barrelLength=20; + ACE_barrelTwist=279.4; + ACE_barrelLength=508.0; }; class Trixie_MK12 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18; + ACE_barrelTwist=177.8; + ACE_barrelLength=457.2; }; class Trixie_LM308MWS : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=16; + ACE_barrelTwist=285.75; + ACE_barrelLength=406.4; }; class Trixie_M14DMR : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class Trixie_M14DMR_NG_Black_Short : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=18; + ACE_barrelTwist=304.8; + ACE_barrelLength=457.2; }; class Trixie_M14DMR_NG_Short : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=18; + ACE_barrelTwist=304.8; + ACE_barrelLength=457.2; }; class Trixie_M14 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class Trixie_M40A3 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24; + ACE_barrelTwist=304.8; + ACE_barrelLength=609.6; }; class Trixie_CZ750 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=26; + ACE_barrelTwist=304.8; + ACE_barrelLength=660.4; }; class Trixie_M24 : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=24; + ACE_barrelTwist=285.75; + ACE_barrelLength=609.6; }; class Trixie_AWM338 : Rifle_Base_F { - ACE_barrelTwist=11; - ACE_barrelLength=27; + ACE_barrelTwist=279.4; + ACE_barrelLength=685.8; }; class Trixie_M107 : Rifle_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=29; + ACE_barrelTwist=381.0; + ACE_barrelLength=736.6; }; class Trixie_AS50 : Rifle_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=29; + ACE_barrelTwist=381.0; + ACE_barrelLength=736.6; }; class L110A1_base : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=13.7; + ACE_barrelTwist=177.8; + ACE_barrelLength=347.98; }; class Trixie_L86A2_base : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=25.4; + ACE_barrelTwist=177.8; + ACE_barrelLength=645.16; }; class Trixie_l85a2_base : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20.4; + ACE_barrelTwist=177.8; + ACE_barrelLength=518.16; }; class L7A2_base : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=629.92; }; class rhs_weap_pya : Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=4.4; + ACE_barrelTwist=254.0; + ACE_barrelLength=111.76; }; class rhs_weap_pkp : Rifle_Long_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=25.9; + ACE_barrelTwist=240.03; + ACE_barrelLength=657.86; }; class rhs_weap_pkm : Rifle_Long_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=25.4; + ACE_barrelTwist=240.03; + ACE_barrelLength=645.16; }; class rhs_weap_rpk74m : Rifle_Long_Base_F { - ACE_barrelTwist=7.68; - ACE_barrelLength=23.2; + ACE_barrelTwist=195.072; + ACE_barrelLength=589.28; }; class rhs_weap_rpk74 : Rifle_Long_Base_F { - ACE_barrelTwist=7.68; - ACE_barrelLength=23.2; + ACE_barrelTwist=195.072; + ACE_barrelLength=589.28; }; class rhs_weap_ak74m : Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class rhs_weap_aks74u : Rifle_Base_F { - ACE_barrelTwist=6.3; - ACE_barrelLength=8.3; + ACE_barrelTwist=160.02; + ACE_barrelLength=210.82; }; class rhs_weap_akm : Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class rhs_weap_svd : Rifle_Base_F { - ACE_barrelTwist=9.4; - ACE_barrelLength=24.4; + ACE_barrelTwist=238.76; + ACE_barrelLength=619.76; }; class rhs_weap_svds : Rifle_Base_F { - ACE_barrelTwist=9.4; - ACE_barrelLength=22.2; + ACE_barrelTwist=238.76; + ACE_barrelLength=563.88; }; class rhs_weap_m4_Base : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class rhs_weap_m16a4 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class rhs_weap_m16a4_carryhandle : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class rhs_weap_m16a4_grip : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class rhs_weap_m240B : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=629.92; }; class rhs_weap_m249_pip : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=414.02; }; class rhs_weap_mk18 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=10.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=261.62; }; class rhs_weap_M590_5RD : Rifle_Base_F { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=18.5; + ACE_barrelLength=469.9; }; class rhs_weap_M590_8RD : Rifle_Base_F { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=20; + ACE_barrelLength=508.0; }; class rhs_weap_sr25 : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=24; + ACE_barrelTwist=285.75; + ACE_barrelLength=609.6; }; class rhs_weap_sr25_ec : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=20; + ACE_barrelTwist=285.75; + ACE_barrelLength=508.0; }; class rhs_weap_XM2010_Base_F: Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=24; + ACE_barrelTwist=254.0; + ACE_barrelLength=609.6; }; class R3F_PAMAS : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.9; + ACE_barrelTwist=248.92; + ACE_barrelLength=124.46; }; class R3F_Famas_F1: Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=19.2; + ACE_barrelTwist=304.8; + ACE_barrelLength=487.68; }; class R3F_Famas_surb: Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=15.9; + ACE_barrelTwist=304.8; + ACE_barrelLength=403.86; }; class R3F_Minimi: Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=13.7; + ACE_barrelTwist=177.8; + ACE_barrelLength=347.98; }; class R3F_Minimi_762: Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=19.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=502.92; }; class R3F_FRF2: Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=25.59; + ACE_barrelTwist=304.8; + ACE_barrelLength=649.986; }; class R3F_PGM_Hecate_II: Rifle_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=27.6; + ACE_barrelTwist=381.0; + ACE_barrelLength=701.04; }; class R3F_HK417S_HG : Rifle_Base_F { - ACE_barrelTwist=11; - ACE_barrelLength=12; + ACE_barrelTwist=279.4; + ACE_barrelLength=304.8; }; class R3F_HK417M : Rifle_Base_F { - ACE_barrelTwist=11; - ACE_barrelLength=16; + ACE_barrelTwist=279.4; + ACE_barrelLength=406.4; }; class R3F_HK417L : Rifle_Base_F { - ACE_barrelTwist=11; - ACE_barrelLength=20; + ACE_barrelTwist=279.4; + ACE_barrelLength=508.0; }; class R3F_M107 : Rifle_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=29; + ACE_barrelTwist=381.0; + ACE_barrelLength=736.6; }; class R3F_HK416M : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14; + ACE_barrelTwist=177.8; + ACE_barrelLength=355.6; }; class R3F_MP5SD : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=5.7; + ACE_barrelTwist=254.0; + ACE_barrelLength=144.78; }; class CUP_hgun_Colt1911 : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=5; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.0; }; class CUP_sgun_AA12 : Rifle_Base_F { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=18; + ACE_barrelLength=457.2; }; class CUP_arifle_AK_Base : Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=16.3; + ACE_barrelTwist=240.03; + ACE_barrelLength=414.02; }; class CUP_arifle_AK107_Base : Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class CUP_arifle_AKS_Base : Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class CUP_arifle_AKS74U : Rifle_Base_F { - ACE_barrelTwist=6.3; - ACE_barrelLength=8.3; + ACE_barrelTwist=160.02; + ACE_barrelLength=210.82; }; class CUP_arifle_RPK74 : Rifle_Long_Base_F { - ACE_barrelTwist=7.68; - ACE_barrelLength=23.2; + ACE_barrelTwist=195.072; + ACE_barrelLength=589.28; }; class CUP_srifle_AS50 : Rifle_Long_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=29; + ACE_barrelTwist=381.0; + ACE_barrelLength=736.6; }; class CUP_srifle_AWM_Base : Rifle_Long_Base_F { - ACE_barrelTwist=11; - ACE_barrelLength=27; + ACE_barrelTwist=279.4; + ACE_barrelLength=685.8; }; class CUP_smg_bizon : Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=9.1; + ACE_barrelTwist=240.03; + ACE_barrelLength=231.14; }; class CUP_hgun_Compact : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=3.74; + ACE_barrelTwist=248.92; + ACE_barrelLength=94.996; }; class CUP_srifle_CZ750 : Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=26; + ACE_barrelTwist=304.8; + ACE_barrelLength=660.4; }; class CUP_arifle_CZ805_Base : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=14; + ACE_barrelTwist=304.8; + ACE_barrelLength=355.6; }; class CUP_arifle_CZ805_A1 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=14; + ACE_barrelTwist=304.8; + ACE_barrelLength=355.6; }; class CUP_arifle_CZ805_A2 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=10.9; + ACE_barrelTwist=304.8; + ACE_barrelLength=276.86; }; class CUP_srifle_DMR : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class CUP_hgun_Duty : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=3.74; + ACE_barrelTwist=248.92; + ACE_barrelLength=94.996; }; class CUP_arifle_FNFAL : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=21; + ACE_barrelTwist=304.8; + ACE_barrelLength=533.4; }; class CUP_arifle_G36A : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18.9; + ACE_barrelTwist=177.8; + ACE_barrelLength=480.06; }; class CUP_arifle_G36K : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=12.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; class CUP_arifle_G36C : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=9; + ACE_barrelTwist=177.8; + ACE_barrelLength=228.6; }; class CUP_arifle_MG36 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18.9; + ACE_barrelTwist=177.8; + ACE_barrelLength=480.06; }; class CUP_hgun_Glock17 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.49; + ACE_barrelTwist=248.92; + ACE_barrelLength=114.046; }; class CUP_srifle_CZ550 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=23.622; + ACE_barrelTwist=304.8; + ACE_barrelLength=599.999; }; class CUP_srifle_ksvk : Rifle_Long_Base_F { - ACE_barrelTwist=18; - ACE_barrelLength=39.37; + ACE_barrelTwist=457.2; + ACE_barrelLength=999.998; }; class CUP_lmg_L7A2 : Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=629.92; }; class CUP_arifle_L85A2_Base : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20.4; + ACE_barrelTwist=177.8; + ACE_barrelLength=518.16; }; class CUP_lmg_L110A1 : Rifle_Long_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=13.7; + ACE_barrelTwist=177.8; + ACE_barrelLength=347.98; }; class CUP_srifle_LeeEnfield : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=25.2; + ACE_barrelTwist=254.0; + ACE_barrelLength=640.08; }; class CUP_hgun_M9 : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.9; + ACE_barrelTwist=248.92; + ACE_barrelLength=124.46; }; class CUP_srifle_M14 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class CUP_arifle_M16_Base : Rifle_Base_F { - ACE_barrelTwist=14; - ACE_barrelLength=20; + ACE_barrelTwist=355.6; + ACE_barrelLength=508.0; }; class CUP_arifle_M4_Base : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class CUP_srifle_Mk12SPR : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18; + ACE_barrelTwist=177.8; + ACE_barrelLength=457.2; }; class CUP_srifle_M24_des : Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=24; + ACE_barrelTwist=285.75; + ACE_barrelLength=609.6; }; class CUP_lmg_M60A4 : Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=17; + ACE_barrelTwist=304.8; + ACE_barrelLength=431.8; }; class CUP_srifle_M107_Base : Rifle_Long_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=29; + ACE_barrelTwist=381.0; + ACE_barrelLength=736.6; }; class CUP_srifle_M110 : Rifle_Base_F { - ACE_barrelTwist=11; - ACE_barrelLength=20; + ACE_barrelTwist=279.4; + ACE_barrelLength=508.0; }; class CUP_lmg_M240 : Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=629.92; }; class CUP_lmg_M249_para : Rifle_Long_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=414.02; }; class CUP_lmg_M249 : Rifle_Long_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18; + ACE_barrelTwist=177.8; + ACE_barrelLength=457.2; }; class CUP_sgun_M1014 : Rifle_Base_F { ACE_twistDirection=0; - ACE_barrelTwist=0; - ACE_barrelLength=18.5; + ACE_barrelTwist=0.0; + ACE_barrelLength=469.9; }; class CUP_hgun_Makarov : Pistol_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=3.68; + ACE_barrelTwist=240.03; + ACE_barrelLength=93.472; }; class CUP_hgun_MicroUzi : Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=5; + ACE_barrelTwist=248.92; + ACE_barrelLength=127.0; }; class CUP_lmg_Mk48_Base : Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=19.75; + ACE_barrelTwist=304.8; + ACE_barrelLength=501.65; }; class CUP_smg_MP5SD6 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=5.7; + ACE_barrelTwist=254.0; + ACE_barrelLength=144.78; }; class CUP_smg_MP5A5 : Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=8.9; + ACE_barrelTwist=254.0; + ACE_barrelLength=226.06; }; class CUP_hgun_PB6P9 : Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=4.1; + ACE_barrelTwist=240.03; + ACE_barrelLength=104.14; }; class CUP_hgun_Phantom : Rifle_Base_F { - ACE_barrelTwist=9.7; - ACE_barrelLength=4.7; + ACE_barrelTwist=246.38; + ACE_barrelLength=119.38; }; class CUP_lmg_PKM : Rifle_Long_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=25.4; + ACE_barrelTwist=240.03; + ACE_barrelLength=645.16; }; class CUP_lmg_Pecheneg : Rifle_Long_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=25.9; + ACE_barrelTwist=240.03; + ACE_barrelLength=657.86; }; class CUP_hgun_TaurusTracker455 : Pistol_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=4; + ACE_barrelTwist=304.8; + ACE_barrelLength=101.6; }; class CUP_arifle_Sa58P : Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=15.4; + ACE_barrelTwist=240.03; + ACE_barrelLength=391.16; }; class CUP_arifle_Sa58V : Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=15.4; + ACE_barrelTwist=240.03; + ACE_barrelLength=391.16; }; class CUP_hgun_SA61 : Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=114.3; }; class CUP_sgun_Saiga12K: Rifle_Base_F { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=16.9; + ACE_barrelLength=429.26; } class CUP_arifle_Mk16_CQC : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=10; + ACE_barrelTwist=177.8; + ACE_barrelLength=254.0; }; class CUP_arifle_Mk16_STD : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14; + ACE_barrelTwist=177.8; + ACE_barrelLength=355.6; }; class CUP_arifle_Mk16_SV : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18; + ACE_barrelTwist=177.8; + ACE_barrelLength=457.2; }; class CUP_arifle_Mk17_CQC : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=13; + ACE_barrelTwist=304.8; + ACE_barrelLength=330.2; }; class CUP_arifle_Mk17_STD : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=16; + ACE_barrelTwist=304.8; + ACE_barrelLength=406.4; }; class CUP_arifle_Mk20 : Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=20; + ACE_barrelTwist=304.8; + ACE_barrelLength=508.0; }; class CUP_srifle_SVD : Rifle_Base_F { - ACE_barrelTwist=9.4; - ACE_barrelLength=24.4; + ACE_barrelTwist=238.76; + ACE_barrelLength=619.76; }; class CUP_lmg_UK59 : Rifle_Long_Base_F { - ACE_barrelTwist=15; - ACE_barrelLength=21.7; + ACE_barrelTwist=381.0; + ACE_barrelLength=551.18; }; class CUP_DSHKM_W : MGun { - ACE_barrelTwist=15; - ACE_barrelLength=42.1; + ACE_barrelTwist=381.0; + ACE_barrelLength=1069.34; }; class CUP_KPVT_W : MGun { - ACE_barrelTwist=17.91; - ACE_barrelLength=53; + ACE_barrelTwist=454.914; + ACE_barrelLength=1346.2; }; class CUP_KPVB_W : MGun { - ACE_barrelTwist=17.91; - ACE_barrelLength=53; + ACE_barrelTwist=454.914; + ACE_barrelLength=1346.2; }; class CUP_M134 : MGunCore { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class CUP_M240_veh_W : Rifle_Long_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=629.92; }; class CUP_PKT_W : MGun { - ACE_barrelTwist=9.45; - ACE_barrelLength=28.43; + ACE_barrelTwist=240.03; + ACE_barrelLength=722.122; }; class CUP_srifle_VSSVintorez : Rifle_Base_F { - ACE_barrelTwist=8.3; - ACE_barrelLength=7.9; + ACE_barrelTwist=210.82; + ACE_barrelLength=200.66; }; class CUP_arifle_XM8_Base : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=12.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; class CUP_arifle_XM8_Carbine : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=12.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; class CUP_arifle_xm8_sharpshooter : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class CUP_arifle_xm8_SAW : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class CUP_arifle_XM8_Compact : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=9; + ACE_barrelTwist=177.8; + ACE_barrelLength=228.6; }; class CUP_arifle_XM8_Railed_Base : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=12.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; class CUP_arifle_XM8_Carbine_FG : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=12.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; }; class VTN_AK_BASE: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AK74M: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AK74M_GP25: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AK74M_GP30M: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AKS74: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AKS74N: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AKS74N_76: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AK74_76: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AKMS_aa: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=10.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=261.62; }; class VTN_AKS74U_BASE: Rifle_Base_F { - ACE_barrelTwist=6.3; - ACE_barrelLength=8.3; + ACE_barrelTwist=160.02; + ACE_barrelLength=210.82; }; class VTN_AKM_BASE: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AKMS: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AKMS_T_P: Rifle_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class VTN_AK103_BASE: Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=16.3; + ACE_barrelTwist=240.03; + ACE_barrelLength=414.02; }; class VTN_AK104_BASE: Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=12.4; + ACE_barrelTwist=240.03; + ACE_barrelLength=314.96; }; class VTN_AK105_BASE: Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=12.4; + ACE_barrelTwist=254.0; + ACE_barrelLength=314.96; }; class VTN_AK105_P_BASE: Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=12.4; + ACE_barrelTwist=254.0; + ACE_barrelLength=314.96; }; class VTN_SVD_BASE: Rifle_Base_F { - ACE_barrelTwist=9.4; - ACE_barrelLength=24.4; + ACE_barrelTwist=238.76; + ACE_barrelLength=619.76; }; class VTN_SVD_63: Rifle_Base_F { - ACE_barrelTwist=9.4; - ACE_barrelLength=24.4; + ACE_barrelTwist=238.76; + ACE_barrelLength=619.76; }; class VTN_SVD_86: Rifle_Base_F { - ACE_barrelTwist=9.4; - ACE_barrelLength=24.4; + ACE_barrelTwist=238.76; + ACE_barrelLength=619.76; }; class VTN_SV98_BASE: Rifle_Base_F { - ACE_barrelTwist=12.6; - ACE_barrelLength=25.59; + ACE_barrelTwist=320.04; + ACE_barrelLength=649.986; }; class VTN_PKM_BAS: Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=25.4; + ACE_barrelTwist=240.03; + ACE_barrelLength=645.16; }; class VTN_PKP: Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=25.9; + ACE_barrelTwist=240.03; + ACE_barrelLength=657.86; }; class VTN_PYA: Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=4.4; + ACE_barrelTwist=254.0; + ACE_barrelLength=111.76; }; class VTN_PM: Pistol_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=3.68; + ACE_barrelTwist=240.03; + ACE_barrelLength=93.472; }; class VTN_PB: Pistol_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=4.1; + ACE_barrelTwist=240.03; + ACE_barrelLength=104.14; }; class VTN_GSH18: Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.1; + ACE_barrelTwist=248.92; + ACE_barrelLength=104.14; }; class VTN_PSS: Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=1.4; + ACE_barrelTwist=406.4; + ACE_barrelLength=35.56; }; class VTN_PKT: Rifle_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=28.43; + ACE_barrelTwist=240.03; + ACE_barrelLength=722.122; }; class VTN_KORD: Rifle_Base_F { - ACE_barrelTwist=17.91; - ACE_barrelLength=53; + ACE_barrelTwist=454.914; + ACE_barrelLength=1346.2; }; class VTN_KPVT: Rifle_Base_F { - ACE_barrelTwist=17.91; - ACE_barrelLength=53; + ACE_barrelTwist=454.914; + ACE_barrelLength=1346.2; }; class VTN_C_M4A1 : Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class VTN_MK18MOD0: Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=10.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=261.62; }; class VTN_M16_BASE: Rifle_Base_F { - ACE_barrelTwist=14; - ACE_barrelLength=20; + ACE_barrelTwist=355.6; + ACE_barrelLength=508.0; }; class VTN_FN_SAMR_BASE: Rifle_Base_F { - ACE_barrelTwist=7.7; - ACE_barrelLength=20; + ACE_barrelTwist=195.58; + ACE_barrelLength=508.0; }; class VTN_M249_SAW_BASE: Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=18; + ACE_barrelTwist=177.8; + ACE_barrelLength=457.2; }; class VTN_M249_PARA: Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=16.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=414.02; }; class VTN_M240G_BASE: Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=629.92; }; class VTN_M9: Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.9; + ACE_barrelTwist=248.92; + ACE_barrelLength=124.46; }; class VTN_M45A1: Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=5; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.0; }; class VTN_M24: Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=24; + ACE_barrelTwist=285.75; + ACE_barrelLength=609.6; }; class VTN_M240: Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=24.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=629.92; }; class VTN_KO44: Rifle_Base_F { - ACE_barrelTwist=9.5; - ACE_barrelLength=20.2; + ACE_barrelTwist=241.3; + ACE_barrelLength=513.08; }; class VTN_SAIGA_MK03: Rifle_Base_F { ACE_twistDirection=9.45; - ACE_barrelLength=16.3; + ACE_barrelLength=414.02; }; }; \ No newline at end of file diff --git a/mod.cpp b/mod.cpp index f1cef6b6a2..b878c76a6d 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,4 +1,4 @@ -name = "ACE3"; +name = "Advanced Combat Environment 3.0.0"; picture = "logo_ace3_ca.paa"; actionName = "GitHub"; action = "https://github.com/acemod/ACE3"; @@ -7,6 +7,6 @@ logo = "logo_ace3_ca.paa"; logoOver = "logo_ace3_ca.paa"; tooltip = "ACE3"; tooltipOwned = "ACE3 Owned"; -overview = "ACE3 is a joint effort by the teams behind ACE2, AGM and CSE to improve the realism and authenticity of Arma 3."; +overview = "Advanced Combat Environment 3, also known as ACE3, is a joint effort by the teams behind ACE2, AGM and CSE to improve the realism and authenticity of Arma 3."; author = "ACE3 Team"; overviewPicture = "logo_ace3_ca.paa"; diff --git a/optionals/compat_asdg/$PBOPREFIX$ b/optionals/compat_asdg/$PBOPREFIX$ new file mode 100644 index 0000000000..0ba5166c16 --- /dev/null +++ b/optionals/compat_asdg/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_asdg \ No newline at end of file diff --git a/optionals/compat_asdg/config.cpp b/optionals/compat_asdg/config.cpp index b485685c55..c7e7903ce2 100644 --- a/optionals/compat_asdg/config.cpp +++ b/optionals/compat_asdg/config.cpp @@ -28,6 +28,7 @@ class asdg_OpticRail1913: asdg_OpticRail { ACE_optic_Arco_2D = 1; ACE_optic_Arco_PIP = 1; ACE_optic_MRCO_2D = 1; + ACE_optic_MRCO_PIP = 1; ACE_optic_SOS_2D = 1; ACE_optic_SOS_PIP = 1; ACE_optic_LRPS_2D = 1; diff --git a/optionals/compat_cup/$PBOPREFIX$ b/optionals/compat_cup/$PBOPREFIX$ new file mode 100644 index 0000000000..42044805ba --- /dev/null +++ b/optionals/compat_cup/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_cup \ No newline at end of file diff --git a/optionals/compat_cup/CfgAmmo.hpp b/optionals/compat_cup/CfgAmmo.hpp index 1dcd91bc23..58f61aedce 100644 --- a/optionals/compat_cup/CfgAmmo.hpp +++ b/optionals/compat_cup/CfgAmmo.hpp @@ -5,418 +5,418 @@ class CfgAmmo class B_127x99_Ball; class CUP_B_545x39_Ball: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_Green: CUP_B_545x39_Ball { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_Red: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_White: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_Yellow: BulletBase { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_762x39_Ball: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_762x39_Ball_Tracer_Green: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=117; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.5816; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_9x18_Ball: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_Tracer_Green: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_Tracer_Red: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_Tracer_Yellow: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_White_Tracer: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x19_Ball: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class CUP_B_762x51_noTracer: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_303_Ball: BulletBase { - ACE_caliber=0.311; - ACE_bulletLength=1.227; - ACE_bulletMass=174; + ACE_caliber=7.899; + ACE_bulletLength=31.166; + ACE_bulletMass=11.2752; 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}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class CUP_B_127x107_Ball_Green_Tracer: BulletBase { - ACE_caliber=0.511; - ACE_bulletLength=2.520; - ACE_bulletMass=745; + ACE_caliber=12.979; + ACE_bulletLength=64.008; + ACE_bulletMass=48.276; 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.63}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={820}; - ACE_barrelLengths[]={28.7}; + ACE_barrelLengths[]={728.98}; }; class CUP_B_127x108_Ball_Green_Tracer: BulletBase { - ACE_caliber=0.511; - ACE_bulletLength=2.520; - ACE_bulletMass=745; + ACE_caliber=12.979; + ACE_bulletLength=64.008; + ACE_bulletMass=48.276; 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.63}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={820}; - ACE_barrelLengths[]={28.7}; + ACE_barrelLengths[]={728.98}; }; class CUP_B_762x54_Ball_White_Tracer: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x54_Ball_Red_Tracer: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x54_Ball_Green_Tracer: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x54_Ball_Yellow_Tracer: BulletBase { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_9x39_SP5: BulletBase { - ACE_caliber=0.364; - ACE_bulletLength=1.24; - ACE_bulletMass=250; + ACE_caliber=9.246; + ACE_bulletLength=31.496; + ACE_bulletMass=16.2; 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.275}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={280, 300, 320}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_762x51_Tracer_Green: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Tracer_Red: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Tracer_Yellow: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Tracer_White: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class B_127x107_Ball: BulletBase { - ACE_caliber=0.511; - ACE_bulletLength=2.520; - ACE_bulletMass=745; + ACE_caliber=12.979; + ACE_bulletLength=64.008; + ACE_bulletMass=48.276; 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.63}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={820}; - ACE_barrelLengths[]={28.7}; + ACE_barrelLengths[]={728.98}; }; class CUP_B_9x18_SD: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 340}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_765x17_Ball: BulletBase { - ACE_caliber=0.3125; - ACE_bulletLength=0.610; - ACE_bulletMass=65; + ACE_caliber=7.938; + ACE_bulletLength=15.494; + ACE_bulletMass=4.212; 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.118}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={282, 300, 320}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class CUP_B_145x115_AP_Green_Tracer: BulletBase { - ACE_caliber=0.586; - ACE_bulletLength=2.00; - ACE_bulletMass=1010; + ACE_caliber=14.884; + ACE_bulletLength=50.8; + ACE_bulletMass=65.448; 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.620}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={1000}; - ACE_barrelLengths[]={53}; + ACE_barrelLengths[]={1346.2}; }; class CUP_B_127x99_Ball_White_Tracer: B_127x99_Ball { - ACE_caliber=0.510; - ACE_bulletLength=2.310; - ACE_bulletMass=647; + ACE_caliber=12.954; + ACE_bulletLength=58.674; + ACE_bulletMass=41.9256; 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[]={853}; - ACE_barrelLengths[]={29}; + ACE_barrelLengths[]={736.6}; }; class CUP_B_86x70_Ball_noTracer: BulletBase { - ACE_caliber=0.338; - ACE_bulletLength=1.70; - ACE_bulletMass=300; + ACE_caliber=8.585; + ACE_bulletLength=43.18; + ACE_bulletMass=19.44; 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.381}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={820, 826, 830}; - ACE_barrelLengths[]={24, 26.5, 28}; + ACE_barrelLengths[]={609.6, 673.1, 711.2}; }; }; \ No newline at end of file diff --git a/optionals/compat_hlc_ar15/$PBOPREFIX$ b/optionals/compat_hlc_ar15/$PBOPREFIX$ new file mode 100644 index 0000000000..1151a9959c --- /dev/null +++ b/optionals/compat_hlc_ar15/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_hlc_ar15 \ No newline at end of file diff --git a/optionals/compat_hlc_ar15/CfgWeapons.hpp b/optionals/compat_hlc_ar15/CfgWeapons.hpp index d57de932e6..53928f25d4 100644 --- a/optionals/compat_hlc_ar15/CfgWeapons.hpp +++ b/optionals/compat_hlc_ar15/CfgWeapons.hpp @@ -4,62 +4,62 @@ class CfgWeapons class Rifle_Base_F; class hlc_ar15_base: Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=11.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=292.1; }; class hlc_rifle_RU556: hlc_ar15_base { - ACE_barrelTwist=7; - ACE_barrelLength=10.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=261.62; }; class hlc_rifle_RU5562: hlc_rifle_RU556 { - ACE_barrelTwist=7; - ACE_barrelLength=10.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=261.62; }; class hlc_rifle_CQBR: hlc_rifle_RU556 { - ACE_barrelTwist=7; - ACE_barrelLength=10; + ACE_barrelTwist=177.8; + ACE_barrelLength=254.0; }; class hlc_rifle_M4: hlc_rifle_RU556 { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class hlc_rifle_bcmjack: hlc_ar15_base { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class hlc_rifle_Colt727: hlc_ar15_base { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class hlc_rifle_Colt727_GL: hlc_rifle_Colt727 { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class hlc_rifle_Bushmaster300: hlc_rifle_Colt727 { - ACE_barrelTwist=8; - ACE_barrelLength=14.5; + ACE_barrelTwist=203.2; + ACE_barrelLength=368.3; }; class hlc_rifle_vendimus: hlc_rifle_Bushmaster300 { - ACE_barrelTwist=8; - ACE_barrelLength=16; + ACE_barrelTwist=203.2; + ACE_barrelLength=406.4; }; class hlc_rifle_SAMR: hlc_rifle_RU556 { - ACE_barrelTwist=9; - ACE_barrelLength=16; + ACE_barrelTwist=228.6; + ACE_barrelLength=406.4; }; class hlc_rifle_honeybase: hlc_rifle_RU556 { - ACE_barrelTwist=8; - ACE_barrelLength=6; + ACE_barrelTwist=203.2; + ACE_barrelLength=152.4; }; }; \ No newline at end of file diff --git a/optionals/compat_hlc_wp_mp5/$PBOPREFIX$ b/optionals/compat_hlc_wp_mp5/$PBOPREFIX$ new file mode 100644 index 0000000000..397f5e9e6b --- /dev/null +++ b/optionals/compat_hlc_wp_mp5/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_hlc_wp_mp5 \ No newline at end of file diff --git a/optionals/compat_hlc_wp_mp5/CfgWeapons.hpp b/optionals/compat_hlc_wp_mp5/CfgWeapons.hpp index bb2762d1bc..b9cc94818e 100644 --- a/optionals/compat_hlc_wp_mp5/CfgWeapons.hpp +++ b/optionals/compat_hlc_wp_mp5/CfgWeapons.hpp @@ -4,57 +4,57 @@ class CfgWeapons class Rifle_Base_F; class hlc_MP5_base: Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=9; + ACE_barrelTwist=254.0; + ACE_barrelLength=228.6; }; class hlc_smg_mp5k_PDW: hlc_MP5_base { - ACE_barrelTwist=10; - ACE_barrelLength=4.5; + ACE_barrelTwist=254.0; + ACE_barrelLength=114.3; }; class hlc_smg_mp5k: hlc_smg_mp5k_PDW { - ACE_barrelTwist=10; - ACE_barrelLength=4.5; + ACE_barrelTwist=254.0; + ACE_barrelLength=114.3; }; class hlc_smg_mp5a2: hlc_MP5_base { - ACE_barrelTwist=10; - ACE_barrelLength=9; + ACE_barrelTwist=254.0; + ACE_barrelLength=228.6; }; class hlc_smg_MP5N: hlc_MP5_base { - ACE_barrelTwist=10; - ACE_barrelLength=9; + ACE_barrelTwist=254.0; + ACE_barrelLength=228.6; }; class hlc_smg_9mmar: hlc_smg_MP5N { - ACE_barrelTwist=10; - ACE_barrelLength=9; + ACE_barrelTwist=254.0; + ACE_barrelLength=228.6; }; class hlc_smg_mp5a4: hlc_MP5_base { - ACE_barrelTwist=10; - ACE_barrelLength=9; + ACE_barrelTwist=254.0; + ACE_barrelLength=228.6; }; class hlc_smg_mp510: hlc_smg_MP5N { - ACE_barrelTwist=15; - ACE_barrelLength=9; + ACE_barrelTwist=381.0; + ACE_barrelLength=228.6; }; class hlc_smg_mp5sd5: hlc_MP5_base { - ACE_barrelTwist=10; - ACE_barrelLength=9; + ACE_barrelTwist=254.0; + ACE_barrelLength=228.6; }; class hlc_smg_mp5a3: hlc_smg_mp5a2 { - ACE_barrelTwist=10; - ACE_barrelLength=9; + ACE_barrelTwist=254.0; + ACE_barrelLength=228.6; }; class hlc_smg_mp5sd6: hlc_smg_mp5sd5 { - ACE_barrelTwist=10; - ACE_barrelLength=9; + ACE_barrelTwist=254.0; + ACE_barrelLength=228.6; }; }; diff --git a/optionals/compat_hlcmods_ak/$PBOPREFIX$ b/optionals/compat_hlcmods_ak/$PBOPREFIX$ new file mode 100644 index 0000000000..d1d239c6d5 --- /dev/null +++ b/optionals/compat_hlcmods_ak/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_hlcmods_ak \ No newline at end of file diff --git a/optionals/compat_hlcmods_ak/CfgWeapons.hpp b/optionals/compat_hlcmods_ak/CfgWeapons.hpp index 390d3e6177..82e319ef7c 100644 --- a/optionals/compat_hlcmods_ak/CfgWeapons.hpp +++ b/optionals/compat_hlcmods_ak/CfgWeapons.hpp @@ -6,53 +6,53 @@ class CfgWeapons class InventoryOpticsItem_Base_F; class hlc_rifle_ak74: hlc_ak_base { - ACE_barrelTwist=7.8699999; - ACE_barrelLength=16.299999; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class hlc_rifle_aku12: hlc_rifle_ak12 { - ACE_barrelTwist=6.3000002; - ACE_barrelLength=8.3000002; + ACE_barrelTwist=160.02; + ACE_barrelLength=210.82; }; class hlc_rifle_RPK12: hlc_rifle_ak12 { - ACE_barrelLength=23.200001; + ACE_barrelLength=589.28; }; class hlc_rifle_aks74u: hlc_rifle_ak74 { - ACE_barrelTwist=6.3000002; - ACE_barrelLength=8.3000002; + ACE_barrelTwist=160.02; + ACE_barrelLength=210.82; }; class hlc_rifle_ak47: hlc_rifle_ak74 { - ACE_barrelTwist=9.4499998; - ACE_barrelLength=16.299999; + ACE_barrelTwist=240.03; + ACE_barrelLength=414.02; }; class hlc_rifle_akm: hlc_rifle_ak47 { - ACE_barrelTwist=7.8699999; - ACE_barrelLength=16.299999; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class hlc_rifle_rpk: hlc_rifle_ak47 { - ACE_barrelTwist=9.4499998; - ACE_barrelLength=23.200001; + ACE_barrelTwist=240.03; + ACE_barrelLength=589.28; }; class hlc_rifle_rpk74n: hlc_rifle_rpk { - ACE_barrelTwist=9.4499998; - ACE_barrelLength=23.200001; + ACE_barrelTwist=240.03; + ACE_barrelLength=589.28; }; class hlc_rifle_aek971: hlc_rifle_ak74 { - ACE_barrelTwist=9.5; - ACE_barrelLength=17; + ACE_barrelTwist=241.3; + ACE_barrelLength=431.8; }; class hlc_rifle_saiga12k: hlc_rifle_ak47 { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=16.9; + ACE_barrelLength=429.26; }; class HLC_Optic_PSO1 : optic_dms { diff --git a/optionals/compat_hlcmods_aug/$PBOPREFIX$ b/optionals/compat_hlcmods_aug/$PBOPREFIX$ new file mode 100644 index 0000000000..6b917cc98c --- /dev/null +++ b/optionals/compat_hlcmods_aug/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_hlcmods_aug \ No newline at end of file diff --git a/optionals/compat_hlcmods_aug/CfgWeapons.hpp b/optionals/compat_hlcmods_aug/CfgWeapons.hpp index b46cf485e1..4666605348 100644 --- a/optionals/compat_hlcmods_aug/CfgWeapons.hpp +++ b/optionals/compat_hlcmods_aug/CfgWeapons.hpp @@ -5,47 +5,47 @@ class CfgWeapons class hlc_aug_base; class hlc_rifle_aug: hlc_aug_base { - ACE_barrelTwist=9; - ACE_barrelLength=20; + ACE_barrelTwist=228.6; + ACE_barrelLength=508.0; }; class hlc_rifle_auga1carb: hlc_rifle_aug { - ACE_barrelTwist=9; - ACE_barrelLength=16; + ACE_barrelTwist=228.6; + ACE_barrelLength=406.4; }; class hlc_rifle_aughbar: hlc_rifle_aug { - ACE_barrelTwist=9; - ACE_barrelLength=24; + ACE_barrelTwist=228.6; + ACE_barrelLength=609.6; }; class hlc_rifle_augpara: hlc_rifle_aug { - ACE_barrelTwist=9; - ACE_barrelLength=16.5; + ACE_barrelTwist=228.6; + ACE_barrelLength=419.1; }; class hlc_rifle_auga2: hlc_rifle_aug { - ACE_barrelTwist=9; - ACE_barrelLength=20; + ACE_barrelTwist=228.6; + ACE_barrelLength=508.0; }; class hlc_rifle_auga2para: hlc_rifle_auga2 { - ACE_barrelTwist=9; - ACE_barrelLength=16.5; + ACE_barrelTwist=228.6; + ACE_barrelLength=419.1; }; class hlc_rifle_auga2carb: hlc_rifle_auga2 { - ACE_barrelTwist=9; - ACE_barrelLength=18; + ACE_barrelTwist=228.6; + ACE_barrelLength=457.2; }; class hlc_rifle_auga2lsw: hlc_rifle_aughbar { - ACE_barrelTwist=9; - ACE_barrelLength=24; + ACE_barrelTwist=228.6; + ACE_barrelLength=609.6; }; class hlc_rifle_auga3: hlc_rifle_aug { - ACE_barrelTwist=9; - ACE_barrelLength=18; + ACE_barrelTwist=228.6; + ACE_barrelLength=457.2; }; }; \ No newline at end of file diff --git a/optionals/compat_hlcmods_core/$PBOPREFIX$ b/optionals/compat_hlcmods_core/$PBOPREFIX$ new file mode 100644 index 0000000000..9c9e9061e1 --- /dev/null +++ b/optionals/compat_hlcmods_core/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_hlcmods_core \ No newline at end of file diff --git a/optionals/compat_hlcmods_core/CfgAmmo.hpp b/optionals/compat_hlcmods_core/CfgAmmo.hpp index 7259d2da3d..afe3f03973 100644 --- a/optionals/compat_hlcmods_core/CfgAmmo.hpp +++ b/optionals/compat_hlcmods_core/CfgAmmo.hpp @@ -8,172 +8,172 @@ class CfgAmmo class HLC_762x51_ball; class HLC_556NATO_EPR: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class HLC_556NATO_SOST: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class HLC_556NATO_SPR: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class HLC_300Blackout_Ball: B_556x45_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.118; - ACE_bulletMass=147; + ACE_caliber=7.823; + ACE_bulletLength=28.397; + ACE_bulletMass=9.5256; 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}; + ACE_barrelLengths[]={152.4, 406.4, 508.0}; }; class HLC_300Blackout_SMK: HLC_300Blackout_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.489; - ACE_bulletMass=220; + ACE_caliber=7.823; + ACE_bulletLength=37.821; + ACE_bulletMass=14.256; 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}; + ACE_barrelLengths[]={228.6, 406.4, 508.0}; }; class HLC_762x39_Ball: HLC_300Blackout_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class HLC_762x39_Tracer: HLC_762x39_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=117; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.5816; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class HLC_762x51_MK316_20in: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class HLC_762x51_BTSub: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.340; - ACE_bulletMass=200; + ACE_caliber=7.823; + ACE_bulletLength=34.036; + ACE_bulletMass=12.96; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class HLC_762x54_ball: HLC_762x51_ball { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class HLC_762x54_tracer: HLC_762x51_tracer { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class HLC_303Brit_B: B_556x45_Ball { - ACE_caliber=0.311; - ACE_bulletLength=1.227; - ACE_bulletMass=174; + ACE_caliber=7.899; + ACE_bulletLength=31.166; + ACE_bulletMass=11.2752; 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}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class HLC_792x57_Ball: HLC_303Brit_B { - ACE_caliber=0.318; - ACE_bulletLength=1.128; - ACE_bulletMass=196; + ACE_caliber=8.077; + ACE_bulletLength=28.651; + ACE_bulletMass=12.7008; 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}; + ACE_barrelLengths[]={508.0, 599.948, 660.4}; }; class HLC_542x42_ball: HLC_303Brit_B { @@ -183,62 +183,62 @@ class CfgAmmo }; class FH_545x39_Ball: B_556x45_Ball { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class FH_545x39_7u1: FH_545x39_Ball { - ACE_bulletMass=80; + ACE_bulletMass=5.184; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class HLC_57x28mm_JHP: FH_545x39_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.495; - ACE_bulletMass=28; + ACE_caliber=5.69; + ACE_bulletLength=12.573; + ACE_bulletMass=1.8144; 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}; + ACE_barrelLengths[]={101.6, 152.4, 262.89}; }; class HLC_9x19_Ball: B_556x45_Ball { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class HLC_9x19_M882_SMG: B_556x45_Ball { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class HLC_9x19_GoldDot: HLC_9x19_Ball { @@ -250,67 +250,67 @@ class CfgAmmo }; class HLC_10mm_FMJ: HLC_9x19_Ball { - ACE_caliber=0.5; - ACE_bulletLength=0.764; - ACE_bulletMass=165; + ACE_caliber=12.7; + ACE_bulletLength=19.406; + ACE_bulletMass=10.692; 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}; + ACE_barrelLengths[]={101.6, 117.094, 228.6}; }; class HLC_45ACP_Ball: B_556x45_Ball { - ACE_caliber=0.452; - ACE_bulletLength=0.68; - ACE_bulletMass=230; + ACE_caliber=11.481; + ACE_bulletLength=17.272; + ACE_bulletMass=14.904; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class FH_44Mag: HLC_45ACP_Ball { - ACE_caliber=0.429; - ACE_bulletLength=0.804; - ACE_bulletMass=200; + ACE_caliber=10.897; + ACE_bulletLength=20.422; + ACE_bulletMass=12.96; 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}; + ACE_barrelLengths[]={101.6, 190.5, 228.6}; }; class FH_50BMG_SLAP: B_127x99_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.25; - ACE_bulletMass=350; + ACE_caliber=7.823; + ACE_bulletLength=31.75; + ACE_bulletMass=22.68; 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}; + ACE_barrelLengths[]={736.6}; }; class FH_50BMG_Raufoss: B_127x99_Ball { - ACE_caliber=0.510; - ACE_bulletLength=2.380; - ACE_bulletMass=660; + ACE_caliber=12.954; + ACE_bulletLength=60.452; + ACE_bulletMass=42.768; 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}; + ACE_barrelLengths[]={736.6}; }; }; diff --git a/optionals/compat_hlcmods_fal/$PBOPREFIX$ b/optionals/compat_hlcmods_fal/$PBOPREFIX$ new file mode 100644 index 0000000000..91bbe75e96 --- /dev/null +++ b/optionals/compat_hlcmods_fal/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_hlcmods_fal \ No newline at end of file diff --git a/optionals/compat_hlcmods_fal/CfgWeapons.hpp b/optionals/compat_hlcmods_fal/CfgWeapons.hpp index 05a17d8eb4..fd826a6804 100644 --- a/optionals/compat_hlcmods_fal/CfgWeapons.hpp +++ b/optionals/compat_hlcmods_fal/CfgWeapons.hpp @@ -4,47 +4,47 @@ class CfgWeapons class hlc_fal_base; class hlc_rifle_falosw: hlc_fal_base { - ACE_barrelTwist=12; - ACE_barrelLength=13; + ACE_barrelTwist=304.8; + ACE_barrelLength=330.2; }; class hlc_rifle_osw_GL: hlc_rifle_falosw { - ACE_barrelTwist=12; - ACE_barrelLength=13; + ACE_barrelTwist=304.8; + ACE_barrelLength=330.2; }; class hlc_rifle_SLR: hlc_fal_base { - ACE_barrelTwist=12; - ACE_barrelLength=21.700001; + ACE_barrelTwist=304.8; + ACE_barrelLength=551.18; }; class hlc_rifle_STG58F: hlc_fal_base { - ACE_barrelTwist=12; - ACE_barrelLength=21; + ACE_barrelTwist=304.8; + ACE_barrelLength=533.4; }; class hlc_rifle_FAL5061: hlc_fal_base { - ACE_barrelTwist=12; - ACE_barrelLength=18; + ACE_barrelTwist=304.8; + ACE_barrelLength=457.2; }; class hlc_rifle_L1A1SLR: hlc_rifle_SLR { - ACE_barrelTwist=12; - ACE_barrelLength=21.700001; + ACE_barrelTwist=304.8; + ACE_barrelLength=551.18; }; class hlc_rifle_c1A1: hlc_rifle_SLR { - ACE_barrelTwist=12; - ACE_barrelLength=21.700001; + ACE_barrelTwist=304.8; + ACE_barrelLength=551.18; }; class hlc_rifle_LAR: hlc_rifle_FAL5061 { - ACE_barrelTwist=12; - ACE_barrelLength=21; + ACE_barrelTwist=304.8; + ACE_barrelLength=533.4; }; class hlc_rifle_SLRchopmod: hlc_rifle_FAL5061 { - ACE_barrelTwist=12; - ACE_barrelLength=18; + ACE_barrelTwist=304.8; + ACE_barrelLength=457.2; }; }; \ No newline at end of file diff --git a/optionals/compat_hlcmods_g3/$PBOPREFIX$ b/optionals/compat_hlcmods_g3/$PBOPREFIX$ new file mode 100644 index 0000000000..ff5b23f6ea --- /dev/null +++ b/optionals/compat_hlcmods_g3/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_hlcmods_g3 \ No newline at end of file diff --git a/optionals/compat_hlcmods_g3/CfgWeapons.hpp b/optionals/compat_hlcmods_g3/CfgWeapons.hpp index e45fe34048..dc02124667 100644 --- a/optionals/compat_hlcmods_g3/CfgWeapons.hpp +++ b/optionals/compat_hlcmods_g3/CfgWeapons.hpp @@ -4,42 +4,42 @@ class CfgWeapons class hlc_g3_base; class hlc_rifle_g3sg1: hlc_g3_base { - ACE_barrelTwist=12; - ACE_barrelLength=17.700001; + ACE_barrelTwist=304.8; + ACE_barrelLength=449.58; }; class hlc_rifle_psg1: hlc_rifle_g3sg1 { - ACE_barrelTwist=12; - ACE_barrelLength=25.6; + ACE_barrelTwist=304.8; + ACE_barrelLength=650.24; }; class hlc_rifle_g3a3: hlc_rifle_g3sg1 { - ACE_barrelTwist=12; - ACE_barrelLength=17.700001; + ACE_barrelTwist=304.8; + ACE_barrelLength=449.58; }; class hlc_rifle_g3a3ris: hlc_rifle_g3a3 { - ACE_barrelTwist=12; - ACE_barrelLength=17.700001; + ACE_barrelTwist=304.8; + ACE_barrelLength=449.58; }; class hlc_rifle_g3ka4: hlc_rifle_g3a3 { - ACE_barrelTwist=12; - ACE_barrelLength=12.4; + ACE_barrelTwist=304.8; + ACE_barrelLength=314.96; }; class HLC_Rifle_g3ka4_GL: hlc_rifle_g3ka4 { - ACE_barrelTwist=12; - ACE_barrelLength=12.4; + ACE_barrelTwist=304.8; + ACE_barrelLength=314.96; }; class hlc_rifle_hk51: hlc_rifle_g3sg1 { - ACE_barrelTwist=12; - ACE_barrelLength=8.3100004; + ACE_barrelTwist=304.8; + ACE_barrelLength=211.074; }; class hlc_rifle_hk53: hlc_rifle_g3sg1 { - ACE_barrelTwist=7; - ACE_barrelLength=8.3100004; + ACE_barrelTwist=177.8; + ACE_barrelLength=211.074; }; }; \ No newline at end of file diff --git a/optionals/compat_hlcmods_m14/$PBOPREFIX$ b/optionals/compat_hlcmods_m14/$PBOPREFIX$ new file mode 100644 index 0000000000..9542452ad0 --- /dev/null +++ b/optionals/compat_hlcmods_m14/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_hlcmods_m14 \ No newline at end of file diff --git a/optionals/compat_hlcmods_m14/CfgWeapons.hpp b/optionals/compat_hlcmods_m14/CfgWeapons.hpp index 01a67ff063..64db736003 100644 --- a/optionals/compat_hlcmods_m14/CfgWeapons.hpp +++ b/optionals/compat_hlcmods_m14/CfgWeapons.hpp @@ -5,12 +5,12 @@ class CfgWeapons class hlc_rifle_M14; class hlc_M14_base: Rifle_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class hlc_rifle_m14sopmod: hlc_rifle_M14 { - ACE_barrelTwist=12; - ACE_barrelLength=18; + ACE_barrelTwist=304.8; + ACE_barrelLength=457.2; }; }; diff --git a/optionals/compat_hlcmods_m60e4/$PBOPREFIX$ b/optionals/compat_hlcmods_m60e4/$PBOPREFIX$ new file mode 100644 index 0000000000..73c943fe8f --- /dev/null +++ b/optionals/compat_hlcmods_m60e4/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_hlcmods_m60e4 \ No newline at end of file diff --git a/optionals/compat_hlcmods_m60e4/CfgWeapons.hpp b/optionals/compat_hlcmods_m60e4/CfgWeapons.hpp index 9532c1968d..50b4ffbc80 100644 --- a/optionals/compat_hlcmods_m60e4/CfgWeapons.hpp +++ b/optionals/compat_hlcmods_m60e4/CfgWeapons.hpp @@ -4,12 +4,12 @@ class CfgWeapons class hlc_M60e4_base; class hlc_lmg_M60E4: hlc_M60e4_base { - ACE_barrelTwist=12; - ACE_barrelLength=17; + ACE_barrelTwist=304.8; + ACE_barrelLength=431.8; }; class hlc_lmg_m60: hlc_M60e4_base { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; }; diff --git a/optionals/compat_rh_acc/$PBOPREFIX$ b/optionals/compat_rh_acc/$PBOPREFIX$ new file mode 100644 index 0000000000..0b6e3940dd --- /dev/null +++ b/optionals/compat_rh_acc/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rh_acc \ No newline at end of file diff --git a/optionals/compat_rh_de/$PBOPREFIX$ b/optionals/compat_rh_de/$PBOPREFIX$ new file mode 100644 index 0000000000..7d6056b8b4 --- /dev/null +++ b/optionals/compat_rh_de/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rh_de \ No newline at end of file diff --git a/optionals/compat_rh_de/CfgAmmo.hpp b/optionals/compat_rh_de/CfgAmmo.hpp index b66b55f530..2297d89023 100644 --- a/optionals/compat_rh_de/CfgAmmo.hpp +++ b/optionals/compat_rh_de/CfgAmmo.hpp @@ -4,158 +4,158 @@ class CfgAmmo class BulletBase; class RH_50_AE_Ball: BulletBase { - ACE_caliber=0.5; - ACE_bulletLength=1.110; - ACE_bulletMass=325; + ACE_caliber=12.7; + ACE_bulletLength=28.194; + ACE_bulletMass=21.06; 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.228}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={360, 398, 420}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_454_Casull: BulletBase { - ACE_caliber=0.452; - ACE_bulletLength=0.895; - ACE_bulletMass=325; + ACE_caliber=11.481; + ACE_bulletLength=22.733; + ACE_bulletMass=21.06; 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.171}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={450, 490, 500}; - ACE_barrelLengths[]={4, 7.5, 9}; + ACE_barrelLengths[]={101.6, 190.5, 228.6}; }; class RH_32ACP: BulletBase { - ACE_caliber=0.3125; - ACE_bulletLength=0.610; - ACE_bulletMass=65; + ACE_caliber=7.938; + ACE_bulletLength=15.494; + ACE_bulletMass=4.212; 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.118}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={282, 300, 320}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_45ACP: BulletBase { - ACE_caliber=0.452; - ACE_bulletLength=0.68; - ACE_bulletMass=230; + ACE_caliber=11.481; + ACE_bulletLength=17.272; + ACE_bulletMass=14.904; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_B_40SW: BulletBase { - ACE_caliber=0.4; - ACE_bulletLength=0.447; - ACE_bulletMass=135; + ACE_caliber=10.16; + ACE_bulletLength=11.354; + ACE_bulletMass=8.748; 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.105, 0.115, 0.120, 0.105}; ACE_velocityBoundaries[]={365, 305, 259}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={360, 380, 400}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_44mag_ball: BulletBase { - ACE_caliber=0.429; - ACE_bulletLength=0.804; - ACE_bulletMass=200; + ACE_caliber=10.897; + ACE_bulletLength=20.422; + ACE_bulletMass=12.96; 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}; + ACE_barrelLengths[]={101.6, 190.5, 228.6}; }; class RH_357mag_ball: BulletBase { - ACE_caliber=0.357; - ACE_bulletLength=0.541; - ACE_bulletMass=125; + ACE_caliber=9.068; + ACE_bulletLength=13.741; + ACE_bulletMass=8.1; 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.148}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={490, 510, 535}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_762x25: BulletBase { - ACE_caliber=0.310; - ACE_bulletLength=0.5455; - ACE_bulletMass=86; + ACE_caliber=7.874; + ACE_bulletLength=13.856; + ACE_bulletMass=5.5728; 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.17}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={360, 380, 400}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_9x18_Ball: BulletBase { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class RH_B_9x19_Ball: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_B_22LR_SD: BulletBase { - ACE_caliber=0.223; - ACE_bulletLength=0.45; - ACE_bulletMass=38; + ACE_caliber=5.664; + ACE_bulletLength=11.43; + ACE_bulletMass=2.4624; 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.111}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={330, 340, 360}; - ACE_barrelLengths[]={4, 6, 9}; + ACE_barrelLengths[]={101.6, 152.4, 228.6}; }; class RH_57x28mm: BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.495; - ACE_bulletMass=28; + ACE_caliber=5.69; + ACE_bulletLength=12.573; + ACE_bulletMass=1.8144; 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}; + ACE_barrelLengths[]={101.6, 152.4, 262.89}; }; }; \ No newline at end of file diff --git a/optionals/compat_rh_de/CfgWeapons.hpp b/optionals/compat_rh_de/CfgWeapons.hpp index 8fdff293c9..eb7d902a8b 100644 --- a/optionals/compat_rh_de/CfgWeapons.hpp +++ b/optionals/compat_rh_de/CfgWeapons.hpp @@ -4,137 +4,137 @@ class CfgWeapons class RH_Pistol_Base_F; class RH_deagle: RH_Pistol_Base_F { - ACE_barrelTwist=19; - ACE_barrelLength=6; + ACE_barrelTwist=482.6; + ACE_barrelLength=152.4; }; class RH_mateba: Pistol_Base_F { - ACE_barrelTwist=14; - ACE_barrelLength=6; + ACE_barrelTwist=355.6; + ACE_barrelLength=152.4; }; class RH_mp412: Pistol_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=6; + ACE_barrelTwist=254.0; + ACE_barrelLength=152.4; }; class RH_python: Pistol_Base_F { - ACE_barrelTwist=14; - ACE_barrelLength=6; + ACE_barrelTwist=355.6; + ACE_barrelLength=152.4; }; class RH_bull: RH_python { - ACE_barrelTwist=24; - ACE_barrelLength=6.5; + ACE_barrelTwist=609.6; + ACE_barrelLength=165.1; }; class RH_ttracker: Pistol_Base_F { - ACE_barrelTwist=12; - ACE_barrelLength=4; + ACE_barrelTwist=304.8; + ACE_barrelLength=101.6; }; class RH_cz75: RH_Pistol_Base_F { - ACE_barrelTwist=9.7; - ACE_barrelLength=4.7; + ACE_barrelTwist=246.38; + ACE_barrelLength=119.38; }; class RH_p226: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.4; + ACE_barrelTwist=248.92; + ACE_barrelLength=111.76; }; class RH_sw659: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=7.44; + ACE_barrelTwist=248.92; + ACE_barrelLength=188.976; }; class RH_usp: RH_Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.41; + ACE_barrelTwist=406.4; + ACE_barrelLength=112.014; }; class RH_uspm: RH_Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=6; + ACE_barrelTwist=406.4; + ACE_barrelLength=152.4; }; class RH_kimber: RH_Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=5; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.0; }; class RH_m1911: RH_Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=5; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.0; }; class RH_tt33: RH_Pistol_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=4.6; + ACE_barrelTwist=240.03; + ACE_barrelLength=116.84; }; class RH_mak: RH_Pistol_Base_F { - ACE_barrelTwist=9.45; - ACE_barrelLength=3.68; + ACE_barrelTwist=240.03; + ACE_barrelLength=93.472; }; class RH_mk2: RH_Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4; + ACE_barrelTwist=406.4; + ACE_barrelLength=101.6; }; class RH_m9: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.9; + ACE_barrelTwist=248.92; + ACE_barrelLength=124.46; }; class RH_g18: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.49; + ACE_barrelTwist=248.92; + ACE_barrelLength=114.046; }; class RH_g17: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.49; + ACE_barrelTwist=248.92; + ACE_barrelLength=114.046; }; class RH_g19: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4; + ACE_barrelTwist=248.92; + ACE_barrelLength=101.6; }; class RH_gsh18: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.1; + ACE_barrelTwist=248.92; + ACE_barrelLength=104.14; }; class RH_fnp45: RH_Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=114.3; }; class RH_fn57: RH_fnp45 { - ACE_barrelTwist=9.1; - ACE_barrelLength=4.8; + ACE_barrelTwist=231.14; + ACE_barrelLength=121.92; }; class RH_vp70: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=4.6; + ACE_barrelTwist=248.92; + ACE_barrelLength=116.84; }; class RH_vz61: RH_Pistol_Base_F { - ACE_barrelTwist=16; - ACE_barrelLength=4.5; + ACE_barrelTwist=406.4; + ACE_barrelLength=114.3; }; class RH_tec9: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=5; + ACE_barrelTwist=248.92; + ACE_barrelLength=127.0; }; class RH_muzi: RH_Pistol_Base_F { - ACE_barrelTwist=9.8; - ACE_barrelLength=5; + ACE_barrelTwist=248.92; + ACE_barrelLength=127.0; }; }; \ No newline at end of file diff --git a/optionals/compat_rh_m4/$PBOPREFIX$ b/optionals/compat_rh_m4/$PBOPREFIX$ new file mode 100644 index 0000000000..a8d524952e --- /dev/null +++ b/optionals/compat_rh_m4/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rh_m4 \ No newline at end of file diff --git a/optionals/compat_rh_m4/CfgAmmo.hpp b/optionals/compat_rh_m4/CfgAmmo.hpp index c15e0e503a..763d96e3e7 100644 --- a/optionals/compat_rh_m4/CfgAmmo.hpp +++ b/optionals/compat_rh_m4/CfgAmmo.hpp @@ -10,197 +10,197 @@ class CfgAmmo { class RH_9x19_B_M822: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_9x19_B_HP: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=124; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=8.0352; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_9x19_B_HPSB: BulletBase { - ACE_caliber=0.355; - ACE_bulletLength=0.603; - ACE_bulletMass=147; + ACE_caliber=9.017; + ACE_bulletLength=15.316; + ACE_bulletMass=9.5256; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class RH_556x45_B_M855A1: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; class RH_556x45_B_Mk318: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class RH_556x45_B_Mk262: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class RH_68x43_B_FMJ: B_65x39_Caseless { - ACE_caliber=0.277; - ACE_bulletLength=0.959; - ACE_bulletMass=115; + ACE_caliber=7.036; + ACE_bulletLength=24.359; + ACE_bulletMass=7.452; 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}; + ACE_barrelLengths[]={304.8, 406.4, 508.0, 609.6}; }; class RH_68x43_B_Match: B_65x39_Caseless { - ACE_caliber=0.277; - ACE_bulletLength=1.250; - ACE_bulletMass=135; + ACE_caliber=7.036; + ACE_bulletLength=31.75; + ACE_bulletMass=8.748; 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}; + ACE_barrelLengths[]={304.8, 406.4, 508.0, 609.6}; }; class RH_762x35_B_FMJ: B_65x39_Caseless { - ACE_caliber=0.308; - ACE_bulletLength=1.118; - ACE_bulletMass=147; + ACE_caliber=7.823; + ACE_bulletLength=28.397; + ACE_bulletMass=9.5256; 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}; + ACE_barrelLengths[]={152.4, 406.4, 508.0}; }; class RH_762x35_B_Match: B_65x39_Caseless { - ACE_caliber=0.308; - ACE_bulletLength=1.153; - ACE_bulletMass=125; + ACE_caliber=7.823; + ACE_bulletLength=29.286; + ACE_bulletMass=8.1; 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}; + ACE_barrelLengths[]={152.4, 406.4, 508.0}; }; class RH_762x35_B_MSB: B_65x39_Caseless { - ACE_caliber=0.308; - ACE_bulletLength=1.489; - ACE_bulletMass=220; + ACE_caliber=7.823; + ACE_bulletLength=37.821; + ACE_bulletMass=14.256; 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}; + ACE_barrelLengths[]={228.6, 406.4, 508.0}; }; class RH_762x51_B_M80A1: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class RH_762x51_B_Mk316LR: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class RH_762x51_B_Mk319: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=130; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=8.424; 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}; + ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; class RH_762x51_B_LFMJSB: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.340; - ACE_bulletMass=200; + ACE_caliber=7.823; + ACE_bulletLength=34.036; + ACE_bulletMass=12.96; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; }; diff --git a/optionals/compat_rh_m4/CfgWeapons.hpp b/optionals/compat_rh_m4/CfgWeapons.hpp index 69536e9302..ad612383d1 100644 --- a/optionals/compat_rh_m4/CfgWeapons.hpp +++ b/optionals/compat_rh_m4/CfgWeapons.hpp @@ -4,127 +4,127 @@ class CfgWeapons class Rifle_Base_F; class RH_ar10: Rifle_Base_F { - ACE_barrelTwist=11.25; - ACE_barrelLength=20.8; + ACE_barrelTwist=285.75; + ACE_barrelLength=528.32; }; class RH_m110: Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=20; + ACE_barrelTwist=254.0; + ACE_barrelLength=508.0; }; class RH_Mk11: RH_m110 { - ACE_barrelTwist=11.25; - ACE_barrelLength=24; + ACE_barrelTwist=285.75; + ACE_barrelLength=609.6; }; class RH_SR25EC: RH_m110 { - ACE_barrelTwist=11.25; - ACE_barrelLength=20; + ACE_barrelTwist=285.75; + ACE_barrelLength=508.0; }; class RH_m4: Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class RH_M4_ris: RH_m4 { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class RH_M4A1_ris: RH_M4_ris { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class RH_M4m: RH_M4A1_ris { - ACE_barrelTwist=7; - ACE_barrelLength=10.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=266.7; }; class RH_M4sbr: RH_M4A1_ris { - ACE_barrelTwist=7; - ACE_barrelLength=10.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=266.7; }; class RH_hb: Rifle_Base_F { - ACE_barrelTwist=8; - ACE_barrelLength=6; + ACE_barrelTwist=203.2; + ACE_barrelLength=152.4; }; class RH_hb_b: RH_hb { - ACE_barrelTwist=8; - ACE_barrelLength=6; + ACE_barrelTwist=203.2; + ACE_barrelLength=152.4; }; class RH_sbr9: Rifle_Base_F { - ACE_barrelTwist=9.7; - ACE_barrelLength=9; + ACE_barrelTwist=246.38; + ACE_barrelLength=228.6; }; class RH_M4A6: RH_M4A1_ris { - ACE_barrelTwist=10; - ACE_barrelLength=14.5; + ACE_barrelTwist=254.0; + ACE_barrelLength=368.3; }; class RH_M16a1: RH_m4 { - ACE_barrelTwist=14; - ACE_barrelLength=20; + ACE_barrelTwist=355.6; + ACE_barrelLength=508.0; }; class RH_M16A2: RH_m4 { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class RH_M16A4 : RH_M4_ris { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class RH_M16A3: RH_M16A4 { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class RH_M16A4_m: RH_M16A4 { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class RH_M16A6: RH_M16A4 { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class RH_Mk12mod1: RH_M16A4 { - ACE_barrelTwist=7; - ACE_barrelLength=18; + ACE_barrelTwist=177.8; + ACE_barrelLength=457.2; }; class RH_SAMR: RH_Mk12mod1 { - ACE_barrelTwist=7.7; - ACE_barrelLength=20; + ACE_barrelTwist=195.58; + ACE_barrelLength=508.0; }; class RH_Hk416: RH_M4A1_ris { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class RH_Hk416s: RH_M4sbr { - ACE_barrelTwist=7; - ACE_barrelLength=10.4; + ACE_barrelTwist=177.8; + ACE_barrelLength=264.16; }; class RH_Hk416c: RH_M4sbr { - ACE_barrelTwist=7; - ACE_barrelLength=9; + ACE_barrelTwist=177.8; + ACE_barrelLength=228.6; }; class RH_M27IAR: RH_Mk12mod1 { - ACE_barrelTwist=7; - ACE_barrelLength=16.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=419.1; }; }; \ No newline at end of file diff --git a/optionals/compat_rh_pdw/$PBOPREFIX$ b/optionals/compat_rh_pdw/$PBOPREFIX$ new file mode 100644 index 0000000000..24f07d7987 --- /dev/null +++ b/optionals/compat_rh_pdw/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rh_pdw \ No newline at end of file diff --git a/optionals/compat_rh_pdw/CfgAmmo.hpp b/optionals/compat_rh_pdw/CfgAmmo.hpp index 706344ff8c..9474ec47eb 100644 --- a/optionals/compat_rh_pdw/CfgAmmo.hpp +++ b/optionals/compat_rh_pdw/CfgAmmo.hpp @@ -2,14 +2,14 @@ class BulletBase; class RH_B_6x35: BulletBase { - ACE_caliber=0.224; - ACE_bulletLength=0.445; - ACE_bulletMass=65; + ACE_caliber=5.69; + ACE_bulletLength=11.303; + ACE_bulletMass=4.212; 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.26}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={730, 750, 760}; - ACE_barrelLengths[]={8, 10, 12}; + ACE_barrelLengths[]={203.2, 254.0, 304.8}; }; \ No newline at end of file diff --git a/optionals/compat_rh_pdw/CfgWeapons.hpp b/optionals/compat_rh_pdw/CfgWeapons.hpp index b009a202ce..37e7f7ffb4 100644 --- a/optionals/compat_rh_pdw/CfgWeapons.hpp +++ b/optionals/compat_rh_pdw/CfgWeapons.hpp @@ -4,7 +4,7 @@ class CfgWeapons class Rifle_Base_F; class RH_PDW: Rifle_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=10; + ACE_barrelTwist=177.8; + ACE_barrelLength=254.0; }; }; diff --git a/optionals/compat_rhs_afrf3/$PBOPREFIX$ b/optionals/compat_rhs_afrf3/$PBOPREFIX$ new file mode 100644 index 0000000000..db0e884853 --- /dev/null +++ b/optionals/compat_rhs_afrf3/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rhs_afrf3 \ No newline at end of file diff --git a/optionals/compat_rhs_afrf3/CfgAmmo.hpp b/optionals/compat_rhs_afrf3/CfgAmmo.hpp index 323634f02c..541437458e 100644 --- a/optionals/compat_rhs_afrf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_afrf3/CfgAmmo.hpp @@ -5,121 +5,121 @@ class CfgAmmo class B_556x45_Ball; class rhs_B_545x39_Ball: B_556x45_Ball { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=52.9; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.42792; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class rhs_B_545x39_Ball_Tracer_Green: rhs_B_545x39_Ball { - ACE_caliber=0.220; - ACE_bulletLength=0.85; - ACE_bulletMass=49.8; + ACE_caliber=5.588; + ACE_bulletLength=21.59; + ACE_bulletMass=3.22704; 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[]={785, 883, 925}; - ACE_barrelLengths[]={10, 16.3, 20}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_762x51_Ball; class rhs_B_762x54_Ball: B_762x51_Ball { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class rhs_B_762x54_Ball_Tracer_Green: B_762x51_Ball { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=149; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.6552; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class rhs_B_762x54_7N1_Ball: rhs_B_762x54_Ball { - ACE_caliber=0.312; - ACE_bulletLength=1.14; - ACE_bulletMass=152; + ACE_caliber=7.925; + ACE_bulletLength=28.956; + ACE_bulletMass=9.8496; 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}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class rhs_B_762x39_Ball: B_762x51_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=123; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.9704; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class rhs_B_762x39_Tracer: rhs_B_762x39_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=117; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=7.5816; 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}; + ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_9x21_Ball; class rhs_B_9x19_7N21: B_9x21_Ball { - ACE_caliber=0.355; - ACE_bulletLength=0.610; - ACE_bulletMass=80.2; + ACE_caliber=9.017; + ACE_bulletLength=15.494; + ACE_bulletMass=5.19696; 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.14}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; ACE_muzzleVelocities[]={445, 460, 480}; - ACE_barrelLengths[]={4, 5, 9}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class rhs_B_9x18_57N181S: B_9x21_Ball { - ACE_caliber=0.365; - ACE_bulletLength=0.610; - ACE_bulletMass=92.6; + ACE_caliber=9.271; + ACE_bulletLength=15.494; + ACE_bulletMass=6.00048; 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.125}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; - ACE_barrelLengths[]={3.8, 5, 9}; + ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; }; \ No newline at end of file diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 49573b164a..90474a958f 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -4,58 +4,58 @@ class CfgWeapons class hgun_Rook40_F; class rhs_weap_pya: hgun_Rook40_F { - ACE_barrelTwist=10; - ACE_barrelLength=4.4; + ACE_barrelTwist=254.0; + ACE_barrelLength=111.76; }; class Pistol_Base_F; class rhs_weap_makarov_pmm: rhs_weap_pya { - ACE_barrelTwist=9.45; - ACE_barrelLength=3.68; + ACE_barrelTwist=240.03; + ACE_barrelLength=93.472; }; class rhs_weap_ak74m_Base_F; class rhs_weap_ak74m: rhs_weap_ak74m_Base_F { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class rhs_weap_akm: rhs_weap_ak74m { - ACE_barrelTwist=7.87; - ACE_barrelLength=16.3; + ACE_barrelTwist=199.898; + ACE_barrelLength=414.02; }; class rhs_weap_aks74; class rhs_weap_aks74u: rhs_weap_aks74 { - ACE_barrelTwist=6.3; - ACE_barrelLength=8.3; + ACE_barrelTwist=160.02; + ACE_barrelLength=210.82; }; class rhs_weap_svd: rhs_weap_ak74m { - ACE_barrelTwist=9.4; - ACE_barrelLength=24.4; + ACE_barrelTwist=238.76; + ACE_barrelLength=619.76; }; class rhs_weap_svdp; class rhs_weap_svds: rhs_weap_svdp { - ACE_barrelTwist=9.4; - ACE_barrelLength=22.2; + ACE_barrelTwist=238.76; + ACE_barrelLength=563.88; }; class rhs_pkp_base; class rhs_weap_pkp: rhs_pkp_base { - ACE_barrelTwist=9.45; - ACE_barrelLength=25.9; + ACE_barrelTwist=240.03; + ACE_barrelLength=657.86; }; class rhs_weap_pkm: rhs_weap_pkp { - ACE_barrelTwist=9.45; - ACE_barrelLength=25.4; + ACE_barrelTwist=240.03; + ACE_barrelLength=645.16; }; class rhs_weap_rpk74m: rhs_weap_pkp { - ACE_barrelTwist=7.68; - ACE_barrelLength=23.2; + ACE_barrelTwist=195.072; + ACE_barrelLength=589.28; }; class rhs_acc_sniper_base; diff --git a/optionals/compat_rhs_usf3/$PBOPREFIX$ b/optionals/compat_rhs_usf3/$PBOPREFIX$ new file mode 100644 index 0000000000..5d837d06d7 --- /dev/null +++ b/optionals/compat_rhs_usf3/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rhs_usf3 \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp index 68a8c8f7fd..382ad1480e 100644 --- a/optionals/compat_rhs_usf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp @@ -4,94 +4,94 @@ class CfgAmmo class BulletBase; class rhsusf_B_300winmag: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.489; - ACE_bulletMass=220; + ACE_caliber=7.823; + ACE_bulletLength=37.821; + ACE_bulletMass=14.256; 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.310}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={847, 867, 877}; - ACE_barrelLengths[]={20, 24, 26}; + ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class B_556x45_Ball; class rhs_ammo_556x45_Mk318_Ball: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=62; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.0176; 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}; + ACE_barrelLengths[]={254.0, 393.7, 508.0}; }; class rhs_ammo_556x45_Mk262_Ball: B_556x45_Ball { - ACE_caliber=0.224; - ACE_bulletLength=0.906; - ACE_bulletMass=77; + ACE_caliber=5.69; + ACE_bulletLength=23.012; + ACE_bulletMass=4.9896; 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}; + ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0}; }; class rhs_ammo_762x51_M80_Ball: BulletBase { - ACE_caliber=0.308; - ACE_bulletLength=1.14; - ACE_bulletMass=146; + ACE_caliber=7.823; + ACE_bulletLength=28.956; + ACE_bulletMass=9.4608; 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}; + ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class rhs_ammo_762x51_M118_Special_Ball: rhs_ammo_762x51_M80_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=175; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=11.34; 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.243}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; ACE_muzzleVelocities[]={750, 780, 790, 794}; - ACE_barrelLengths[]={16, 20, 24, 26}; + ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class rhs_ammo_762x51_M993_Ball: rhs_ammo_762x51_M80_Ball { - ACE_caliber=0.308; - ACE_bulletLength=1.24; - ACE_bulletMass=127; + ACE_caliber=7.823; + ACE_bulletLength=31.496; + ACE_bulletMass=8.2296; 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}; + ACE_barrelLengths[]={330.2, 406.4, 508.0}; }; class rhs_ammo_45ACP_MHP: BulletBase { - ACE_caliber=0.452; - ACE_bulletLength=0.68; - ACE_bulletMass=230; + ACE_caliber=11.481; + ACE_bulletLength=17.272; + ACE_bulletMass=14.904; 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}; + ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; }; \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index a9791cd6b8..1cceb9a76b 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -4,72 +4,74 @@ class CfgWeapons class Pistol_Base_F; class Rifle_Base_F; class srifle_EBR_F; + class launch_O_Titan_F; + class rhs_weap_XM2010_Base_F: Rifle_Base_F { - ACE_barrelTwist=10; - ACE_barrelLength=24; + ACE_barrelTwist=254.0; + ACE_barrelLength=609.6; }; class arifle_MX_Base_F; class rhs_weap_m4_Base: arifle_MX_Base_F { - ACE_barrelTwist=7; - ACE_barrelLength=14.5; + ACE_barrelTwist=177.8; + ACE_barrelLength=368.3; }; class rhs_weap_m4a1; class rhs_weap_mk18: rhs_weap_m4a1 { - ACE_barrelTwist=7; - ACE_barrelLength=10.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=261.62; }; class rhs_weap_m16a4: rhs_weap_m4_Base { - ACE_barrelTwist=7; - ACE_barrelLength=20; + ACE_barrelTwist=177.8; + ACE_barrelLength=508.0; }; class rhs_M249_base; class rhs_weap_m249_pip: rhs_M249_base { - ACE_barrelTwist=7; - ACE_barrelLength=16.3; + ACE_barrelTwist=177.8; + ACE_barrelLength=414.02; }; class weap_m240_base; class rhs_weap_m240B: weap_m240_base { - ACE_barrelTwist=12; - ACE_barrelLength=24.8; + ACE_barrelTwist=304.8; + ACE_barrelLength=629.92; }; class rhs_weap_m14ebrri: srifle_EBR_F { - ACE_barrelTwist=12; - ACE_barrelLength=22; + ACE_barrelTwist=304.8; + ACE_barrelLength=558.8; }; class rhs_weap_sr25: rhs_weap_m14ebrri { - ACE_barrelTwist=11.25; - ACE_barrelLength=24; + ACE_barrelTwist=285.75; + ACE_barrelLength=609.6; }; class rhs_weap_sr25_ec: rhs_weap_sr25 { - ACE_barrelTwist=11.25; - ACE_barrelLength=20; + ACE_barrelTwist=285.75; + ACE_barrelLength=508.0; }; class rhs_weap_M590_5RD: Rifle_Base_F { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=18.5; + ACE_barrelLength=469.9; }; class rhs_weap_M590_8RD: rhs_weap_M590_5RD { - ACE_barrelTwist=0; + ACE_barrelTwist=0.0; ACE_twistDirection=0; - ACE_barrelLength=20; + ACE_barrelLength=508.0; }; class hgun_ACPC2_F; class rhsusf_weap_m1911a1: hgun_ACPC2_F { - ACE_barrelTwist=16; - ACE_barrelLength=5; + ACE_barrelTwist=406.4; + ACE_barrelLength=127.0; }; class rhsusf_acc_sniper_base; @@ -83,4 +85,14 @@ class CfgWeapons ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; ACE_ScopeAdjust_Increment = 0.1; }; + + class rhs_weap_fgm148 : launch_O_Titan_F { + ace_javelin_enabled = 1; + weaponInfoType = "ACE_RscOptics_javelin"; + modelOptics = "\z\ace\addons\javelin\data\reticle_titan.p3d"; + + canLock = 0; + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + }; }; \ No newline at end of file diff --git a/optionals/compat_rksl_pm_ii/$PBOPREFIX$ b/optionals/compat_rksl_pm_ii/$PBOPREFIX$ new file mode 100644 index 0000000000..2d73d5ce66 --- /dev/null +++ b/optionals/compat_rksl_pm_ii/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rksl_pm_ii \ No newline at end of file diff --git a/optionals/server/$NOBIN$ b/optionals/server/$NOBIN$ new file mode 100644 index 0000000000..c2037c2142 --- /dev/null +++ b/optionals/server/$NOBIN$ @@ -0,0 +1 @@ +NOBIN \ No newline at end of file diff --git a/optionals/server/$PBOPREFIX$ b/optionals/server/$PBOPREFIX$ new file mode 100644 index 0000000000..67fa39d646 --- /dev/null +++ b/optionals/server/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\server \ No newline at end of file diff --git a/optionals/server/script_component.hpp b/optionals/server/script_component.hpp index f044c9601a..18afd814f7 100644 --- a/optionals/server/script_component.hpp +++ b/optionals/server/script_component.hpp @@ -1,12 +1,12 @@ -#define COMPONENT serverconfig +#define COMPONENT server #include "\z\ace\Addons\main\script_mod.hpp" -#ifdef DEBUG_ENABLED_SERVERCONFIG +#ifdef DEBUG_ENABLED_SERVER #define DEBUG_MODE_FULL #endif -#ifdef DEBUG_SETTINGS_SERVERCONFIG - #define DEBUG_SETTINGS DEBUG_SETTINGS_SERVERCONFIG +#ifdef DEBUG_SETTINGS_SERVER + #define DEBUG_SETTINGS DEBUG_SETTINGS_SERVER #endif #include "\z\ace\Addons\main\script_macros.hpp" diff --git a/tools/deploy.py b/tools/deploy.py new file mode 100755 index 0000000000..b9fade83a0 --- /dev/null +++ b/tools/deploy.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 + +#################################### +# ACE3 automatic deployment script # +# ================================ # +# This is not meant to be run # +# directly! # +#################################### + +import os +import sys +import shutil +import traceback +import subprocess as sp +from pygithub3 import Github + + +TRANSLATIONISSUE = 367 +TRANSLATIONBODY = """**How to translate ACE3:** +https://github.com/acemod/ACE3/blob/master/documentation/development/how-to-translate-ace3.md + +{} +""" + +REPOUSER = "acemod" +REPONAME = "ACE3" +REPOPATH = "{}/{}".format(REPOUSER,REPONAME) + +USERNAME = "ACE3 Travis" +USEREMAIL = "travis@ace3mod.com" + + +def update_translations(token): + diag = sp.check_output(["python3", "tools/stringtablediag.py", "--markdown"]) + diag = str(diag, "utf-8") + repo = Github(token).get_repo(REPOPATH) + issue = repo.get_issue(TRANSLATIONISSUE) + issue.edit(body=TRANSLATIONBODY.format(diag)) + + +def deploy_documentation(token): + devnull = open(os.devnull, "w") + url = "https://{}@github.com/{}".format(token, REPOPATH) + + sp.check_call(["git", "clone", url, "out", "--depth", "10", "--branch", "gh-pages"], stdout=devnull, stderr=devnull) + os.chdir("out") + + sp.check_call(["git", "config", "user.name", USERNAME]) + sp.check_call(["git", "config", "user.email", USEREMAIL]) + + for root, dirs, files in os.walk("../documentation", topdown=False): + target = root.replace("../documentation", "wiki") + if root == "../documentation": + continue + for name in files: + print("{} => {}".format(os.path.join(root, name), os.path.join(target, name))) + shutil.copyfile(os.path.join(root, name), os.path.join(target, name)) + + sp.check_call(["git", "add", "--all", "."]) + + filenum = sp.check_output(["git", "status", "--porcelain"]) + filenum = len(str(filenum, "utf-8").split("\n")) - 1 + if filenum > 0: + sp.check_call(["git", "commit", "-m", "Automatic gh-pages deployment"]) + print("Pushing changes ...") + sp.check_call(["git", "push", "origin", "gh-pages"], stdout=devnull, stderr=devnull) + else: + print("No changes.") + + os.chdir("..") + + +def main(): + print("Obtaining token ...") + try: + token = os.environ["GH_TOKEN"] + except: + print("Could not obtain token.") + print(traceback.format_exc()) + return 1 + else: + print("done.") + + print("\nUpdating translation issue ...") + try: + update_translations(token) + except: + print("Failed to update translation issue.") + print(traceback.format_exc()) + return 1 + else: + print("done.") + + print("\nDeploying documentation ...") + try: + deploy_documentation(token) + except: + print("Failed to deploy documentation.") + print(traceback.format_exc()) + return 1 + else: + print("done.") + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/make.cfg b/tools/make.cfg index 5e2d9d78da..5e4460ffd9 100644 --- a/tools/make.cfg +++ b/tools/make.cfg @@ -14,8 +14,8 @@ project = @ace # Path to project secret key for signing # Make sure this isn't in your public repository! -# Default: None -# key = D:\Program Files (x86)\Bohemia Interactive\Tools\DSSignFile Tools\keys\ace_preAlpha.biprivatekey +# Default: \private_keys\ace_3.0.0.biprivatekey +# key = P:\private_keys\ace_3.0.0.biprivatekey # Path to where private keys are automatically created if the command-line parameter "key" is used # Make sure this isn't in your public repository! @@ -49,10 +49,16 @@ module_root = P:\z\ace\addons optionals_root = P:\z\ace\optionals +# If the command-line variable test, the addons built will be copied to the following folder. +# Default: %USERPROFILE%\documents\Arma 3\ +# test_dir = %USERPROFILE%\documents\Arma 3\ + + # Directory where the built addon will be saved. # Default: release release_dir = P:\z\ace\release + # This string will be prefixed to all build PBO file names. # Default: None pbo_name_prefix = ace_ diff --git a/tools/make.py b/tools/make.py index 382f8dd776..b461d77946 100644 --- a/tools/make.py +++ b/tools/make.py @@ -55,14 +55,20 @@ if sys.platform == "win32": import winreg ######## GLOBALS ######### +ACE_VERSION = "3.0.0" +arma3tools_path = "" work_drive = "" module_root = "" +make_root = "" release_dir = "" module_root_parent = "" optionals_root = "" -key_name = "ace_preAlpha" +key_name = "ace" key = "" dssignfile = "" +prefix = "ace" +pbo_name_prefix = "ace_" +signature_blacklist = ["ace_server.pbo"] ############################################################################### # http://akiscode.com/articles/sha-1directoryhash.shtml @@ -101,6 +107,8 @@ def get_directory_hash(directory): traceback.print_exc() return -2 + retVal = directory_hash.hexdigest() + #print_yellow("Hash Value for {} is {}".format(directory,retVal)) return directory_hash.hexdigest() # Copyright (c) André Burgaud @@ -280,7 +288,7 @@ def color(color): def print_error(msg): color("red") - print ("ERROR: " + msg) + print ("ERROR: {}".format(msg)) color("reset") def print_green(msg): @@ -311,12 +319,12 @@ def copy_important_files(source_dir,destination_dir): #copy importantFiles try: - print_blue("\nSearching for important files in " + source_dir) - print("Source_dir: " + source_dir) - print("Destination_dir: " + destination_dir) + print_blue("\nSearching for important files in {}".format(source_dir)) + print("Source_dir: {}".format(source_dir)) + print("Destination_dir: {}".format(destination_dir)) for file in importantFiles: - print_green("Copying file => " + os.path.join(source_dir,file)) + print_green("Copying file => {}".format(os.path.join(source_dir,file))) shutil.copyfile(os.path.join(source_dir,file),os.path.join(destination_dir,file)) except: print_error("COPYING IMPORTANT FILES.") @@ -325,14 +333,14 @@ def copy_important_files(source_dir,destination_dir): #copy all extension dlls try: os.chdir(os.path.join(source_dir)) - print_blue("\nSearching for DLLs in " + os.getcwd()) + print_blue("\nSearching for DLLs in {}".format(os.getcwd())) filenames = glob.glob("*.dll") if not filenames: print ("Empty SET") for dll in filenames: - print_green("Copying dll => " + os.path.join(source_dir,dll)) + print_green("Copying dll => {}".format(os.path.join(source_dir,dll))) if os.path.isfile(dll): shutil.copyfile(os.path.join(source_dir,dll),os.path.join(destination_dir,dll)) except: @@ -353,17 +361,17 @@ def copy_optionals_for_building(mod,pbos): files = glob.glob(os.path.join(release_dir, "@ace","optionals","*.pbo")) for file in files: file_name = os.path.basename(file) - #print ("Adding the following file: " + file_name) + #print ("Adding the following file: {}".format(file_name)) pbos.append(file_name) pbo_path = os.path.join(release_dir, "@ace","optionals",file_name) sigFile_name = file_name +"."+ key_name + ".bisign" sig_path = os.path.join(release_dir, "@ace","optionals",sigFile_name) if (os.path.isfile(pbo_path)): - print("Moving " + pbo_path + " for processing.") + print("Moving {} for processing.".format(pbo_path)) shutil.move(pbo_path, os.path.join(release_dir,"@ace","addons",file_name)) if (os.path.isfile(sig_path)): - #print("Moving " + sig_path + " for processing.") + #print("Moving {} for processing.".format(sig_path)) shutil.move(sig_path, os.path.join(release_dir,"@ace","addons",sigFile_name)) except: print_error("Error in moving") @@ -385,7 +393,7 @@ def copy_optionals_for_building(mod,pbos): else: destination = os.path.join(module_root,dir_name) - print("Temporarily copying " + os.path.join(optionals_root,dir_name) + " => " + destination + " for building.") + print("Temporarily copying {} => {} for building.".format(os.path.join(optionals_root,dir_name),destination)) if (os.path.exists(destination)): shutil.rmtree(destination, True) shutil.copytree(os.path.join(optionals_root,dir_name), destination) @@ -406,7 +414,7 @@ def cleanup_optionals(mod): else: destination = os.path.join(module_root,dir_name) - print("Cleaning " + destination) + print("Cleaning {}".format(destination)) try: file_name = "ace_{}.pbo".format(dir_name) @@ -418,10 +426,10 @@ def cleanup_optionals(mod): dst_sig_path = os.path.join(release_dir, "@ace","optionals",sigFile_name) if (os.path.isfile(src_file_path)): - #print("Preserving " + file_name) + #print("Preserving {}".format(file_name)) os.renames(src_file_path,dst_file_path) if (os.path.isfile(src_sig_path)): - #print("Preserving " + sigFile_name) + #print("Preserving {}".format(sigFile_name)) os.renames(src_sig_path,dst_sig_path) except FileExistsError: print_error(file_name + " already exists") @@ -434,7 +442,7 @@ def cleanup_optionals(mod): def purge(dir, pattern, friendlyPattern="files"): - print_green("Deleting " + friendlyPattern + " files from directory: " + dir) + print_green("Deleting {} files from directory: {}".format(friendlyPattern,dir)) for f in os.listdir(dir): if re.search(pattern, f): os.remove(os.path.join(dir, f)) @@ -443,8 +451,13 @@ def purge(dir, pattern, friendlyPattern="files"): def build_signature_file(file_name): global key global dssignfile - print("Signing with " + key + ".") - ret = subprocess.call([dssignfile, key, file_name]) + global signature_blacklist + ret = 0 + baseFile = os.path.basename(file_name) + #print_yellow("Sig_fileName: {}".format(baseFile)) + if not (baseFile in signature_blacklist): + print("Signing with {}.".format(key)) + ret = subprocess.call([dssignfile, key, file_name]) if ret == 0: return True else: @@ -456,21 +469,210 @@ def check_for_obsolete_pbos(addonspath, file): if not os.path.exists(os.path.join(addonspath, module)): return True return False + + +def backup_config(module): + #PABST: Convert config (run the macro'd config.cpp through CfgConvert twice to produce a de-macro'd cpp that pboProject can read without fucking up: + global work_drive + global prefix + + try: + configpath = os.path.join(work_drive, prefix, module, "$PBOPREFIX$") + if os.path.isfile(configpath): + shutil.copyfile(configpath, os.path.join(work_drive, prefix, module, "$PBOPREFIX$.backup")) + else: + print_error("$PBOPREFIX$ Does not exist for module: {}.".format(module)) + + except: + print_error("Error creating backup of $PBOPREFIX$ for module {}.".format(module)) + + try: + shutil.copyfile(os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.backup")) + os.chdir(work_drive) + except: + print_error("Error creating backup of config.cpp for module {}.".format(module)) + + return True + +def convert_config(module): + try: + global work_drive + global prefix + global arma3tools_path + + cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-bin", "-dst", os.path.join(work_drive, prefix, module, "config.bin"), os.path.join(work_drive, prefix, module, "config.cpp")] + ret = subprocess.call(cmd) + if ret != 0: + print_error("CfgConvert -bin return code == {}. Usually means there is a syntax error within the config.cpp file.".format(str(ret))) + os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) + shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) + + cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-txt", "-dst", os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.bin")] + ret = subprocess.call(cmd) + if ret != 0: + print_error("CfgConvert -txt return code == {}. Usually means there is a syntax error within the config.cpp file.".format(str(ret))) + os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) + shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) + except Exception as e: + print_error("Exception from convert_config=>CfgConvert: {}".format(e)) + return False + + return True + + +def addon_restore(modulePath): + #PABST: cleanup config BS (you could comment this out to see the "de-macroed" cpp + #print_green("\Pabst! (restoring): {}".format(os.path.join(modulePath, "config.cpp"))) + try: + if os.path.isfile(os.path.join(modulePath, "config.cpp")): + os.remove(os.path.join(modulePath, "config.cpp")) + if os.path.isfile(os.path.join(modulePath, "config.backup")): + os.rename(os.path.join(modulePath, "config.backup"), os.path.join(modulePath, "config.cpp")) + if os.path.isfile(os.path.join(modulePath, "config.bin")): + os.remove(os.path.join(modulePath, "config.bin")) + if os.path.isfile(os.path.join(modulePath, "texHeaders.bin")): + os.remove(os.path.join(modulePath, "texHeaders.bin")) + if os.path.isfile(os.path.join(modulePath, "$PBOPREFIX$.backup")): + if os.path.isfile(os.path.join(modulePath, "$PBOPREFIX$")): + os.remove(os.path.join(modulePath, "$PBOPREFIX$")) + os.rename(os.path.join(modulePath, "$PBOPREFIX$.backup"), os.path.join(modulePath, "$PBOPREFIX$")) + except: + print_yellow("Some error occurred. Check your addon folder {} for integrity".format(modulePath)) + + return True + + +def get_ace_version(): + global ACE_VERSION + versionStamp = ACE_VERSION + #do the magic based on https://github.com/acemod/ACE3/issues/806#issuecomment-95639048 + + try: + scriptModPath = os.path.join(work_drive, prefix, "main\script_mod.hpp") + + if os.path.isfile(scriptModPath): + f = open(scriptModPath, "r") + hpptext = f.read() + f.close() + + if hpptext: + majorText = re.search(r"#define MAJOR (.*\b)", hpptext).group(1) + minorText = re.search(r"#define MINOR (.*\b)", hpptext).group(1) + patchlvlText = re.search(r"#define PATCHLVL (.*\b)", hpptext).group(1) + buildText = re.search(r"#define BUILD (.*\b)", hpptext).group(1) + + if majorText: + versionStamp = "{major}.{minor}.{patchlvl}.{build}".format(major=majorText,minor=minorText,patchlvl=patchlvlText,build=buildText) + + else: + print_error("A Critical file seems to be missing or inaccessible: {}".format(scriptModPath)) + raise FileNotFoundError("File Not Found: {}".format(scriptModPath)) + + except Exception as e: + print_error("Get_Ace_Version error: {}".format(e)) + print_error("Check the integrity of the file: {}".format(scriptModPath)) + versionStamp = ACE_VERSION + print_error("Resetting to the default version stamp: {}".format(versionStamp)) + input("Press Enter to continue...") + print("Resuming build...") + + print_yellow("ACE VERSION set to {}".format(versionStamp)) + ACE_VERSION = versionStamp + return ACE_VERSION + + +def get_private_keyname(commitID,module="main"): + global pbo_name_prefix + + aceVersion = get_ace_version() + keyName = str("{prefix}{version}-{commit_id}".format(prefix=pbo_name_prefix,version=aceVersion,commit_id=commitID)) + return keyName + + +def get_commit_ID(): + # Get latest commit ID + global make_root + curDir = os.getcwd() + try: + gitpath = os.path.join(os.path.dirname(make_root), ".git") + assert os.path.exists(gitpath) + os.chdir(make_root) + + commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"]) + commit_id = str(commit_id, "utf-8")[:8] + except: + print_error("FAILED TO DETERMINE COMMIT ID.") + print_yellow("Verify that \GIT\BIN or \GIT\CMD is in your system path or user path.") + commit_id = "NOGIT" + raise + finally: + pass + os.chdir(curDir) + + print_yellow("COMMIT ID set to {}".format(commit_id)) + return commit_id + + +def version_stamp_pboprefix(module,commitID): + ### Update pboPrefix with the correct version stamp. Use commit_id as the build number. + #This function will not handle any $PBOPREFIX$ backup or cleanup. + global work_drive + global prefix + + configpath = os.path.join(work_drive, prefix, module, "$PBOPREFIX$") + + try: + f = open(configpath, "r") + configtext = f.read() + f.close() + + if configtext: + patchestext = re.search(r"version.*?=.*?$", configtext, re.DOTALL) + if patchestext: + if configtext: + patchestext = re.search(r"(version.*?=)(.*?)$", configtext, re.DOTALL).group(1) + configtext = re.sub(r"version(.*?)=(.*?)$", "version = {}\n".format(commitID), configtext, flags=re.DOTALL) + f = open(configpath, "w") + f.write(configtext) + f.close() + else: + os.remove(os.path.join(work_drive, prefix, module, "$PBOPREFIX$")) + os.rename(os.path.join(work_drive, prefix, module, "$PBOPREFIX$.backup"), os.path.join(work_drive, prefix, module, "$PBOPREFIX$")) + else: + if configtext: + #append version info + f = open(configpath, "a") + f.write("\nversion = {}".format(commitID)) + f.close() + else: + os.remove(os.path.join(work_drive, prefix, module, "$PBOPREFIX$")) + os.rename(os.path.join(work_drive, prefix, module, "$PBOPREFIX$.backup"), os.path.join(work_drive, prefix, module, "$PBOPREFIX$")) + except Exception as e: + print_error("Failed to include build number: {}".format(e)) + return False + + return True + ############################################################################### def main(argv): """Build an Arma addon suite in a directory from rules in a make.cfg file.""" - print_blue(("\nmake.py for Arma, modified for Advanced Combat Environment v" + __version__)) + print_blue("\nmake.py for Arma, modified for Advanced Combat Environment v{}".format(__version__)) + global ACE_VERSION + global arma3tools_path global work_drive global module_root + global make_root global release_dir global module_root_parent global optionals_root global key_name global key global dssignfile + global prefix + global pbo_name_prefix if sys.platform != "win32": print_error("Non-Windows platform (Cygwin?). Please re-run from cmd.") @@ -567,24 +769,14 @@ See the make.cfg file for additional build options. else: check_external = False - print_yellow("\nCheck external references is set to " + str(check_external)) + print_yellow("\nCheck external references is set to {}".format(str(check_external))) # Get the directory the make script is in. make_root = os.path.dirname(os.path.realpath(__file__)) make_root_parent = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) os.chdir(make_root) - # Get latest commit ID - try: - gitpath = os.path.join(os.path.dirname(make_root), ".git") - assert os.path.exists(gitpath) - commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"]) - commit_id = str(commit_id, "utf-8")[:8] - key_name = str(key_name+"-"+commit_id) - except: - print_error("FAILED TO DETERMINE COMMIT ID.") - commit_id = "NOGIT" cfg = configparser.ConfigParser(); try: @@ -625,6 +817,9 @@ See the make.cfg file for additional build options. # Release/build directory, relative to script dir release_dir = cfg.get(make_target, "release_dir", fallback="release") + #Directory to copy the final built PBO's for a test run. + test_dir = cfg.get(make_target, "test_dir", fallback=os.path.join(os.environ["USERPROFILE"],r"documents\Arma 3")) + # Project PBO file prefix (files are renamed to prefix_name.pbo) pbo_name_prefix = cfg.get(make_target, "pbo_name_prefix", fallback=None) @@ -632,21 +827,25 @@ See the make.cfg file for additional build options. module_root_parent = os.path.abspath(os.path.join(os.path.join(work_drive, prefix), os.pardir)) module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons")) optionals_root = os.path.join(module_root_parent, "optionals") - print_green ("module_root: " + module_root) + extensions_root = os.path.join(module_root_parent, "extensions") + + commit_id = get_commit_ID() + key_name = versionStamp = get_private_keyname(commit_id) + print_green ("module_root: {}".format(module_root)) if (os.path.isdir(module_root)): os.chdir(module_root) else: - print_error ("Directory " + module_root + " does not exist.") + print_error ("Directory {} does not exist.".format(module_root)) sys.exit() if (os.path.isdir(optionals_root)): - print_green ("optionals_root: " + optionals_root) + print_green ("optionals_root: {}".format(optionals_root)) else: - print_error ("Directory " + optionals_root + " does not exist.") + print_error ("Directory {} does not exist.".format(optionals_root)) sys.exit() - print_green ("release_dir: " + release_dir) + print_green ("release_dir: {}".format(release_dir)) except: raise @@ -709,43 +908,50 @@ See the make.cfg file for additional build options. print_error("Cannot create release directory") raise - #Temporarily copy optionals_root for building. They will be removed later. - optionals_modules = [] - optional_files = [] - copy_optionals_for_building(optionals_modules,optional_files) - # Get list of subdirs in make root. - dirs = next(os.walk(module_root))[1] + try: + #Temporarily copy optionals_root for building. They will be removed later. + optionals_modules = [] + optional_files = [] + copy_optionals_for_building(optionals_modules,optional_files) + + # Get list of subdirs in make root. + dirs = next(os.walk(module_root))[1] + + # Autodetect what directories to build. + if module_autodetect and not arg_modules: + modules = [] + for path in dirs: + # Any dir that has a config.cpp in its root is an addon to build. + config_path = os.path.join(path, 'config.cpp') + if os.path.isfile(config_path) and not path in ignore: + modules.append(path) + + # Make the key specified from command line if necessary. + if new_key: + if not os.path.isfile(os.path.join(private_key_path, key_name + ".biprivatekey")): + print_yellow("\nRequested key does not exist.") + try: + os.makedirs(private_key_path) + except: + pass + curDir = os.getcwd() + os.chdir(private_key_path) + ret = subprocess.call([dscreatekey, key_name]) # Created in make_root + os.chdir(curDir) + if ret == 0: + print_green("Created: {}".format(os.path.join(private_key_path, key_name + ".biprivatekey"))) + print("Removing any old signature keys...") + purge(os.path.join(module_root, release_dir, project, "addons"), "^.*\.bisign$","*.bisign") + purge(os.path.join(module_root, release_dir, project, "optionals"), "^.*\.bisign$","*.bisign") + purge(os.path.join(module_root, release_dir, project, "keys"), "^.*\.bikey$","*.bikey") + else: + print_error("Failed to create key!") + - # Autodetect what directories to build. - if module_autodetect and not arg_modules: - modules = [] - for path in dirs: - # Any dir that has a config.cpp in its root is an addon to build. - config_path = os.path.join(path, 'config.cpp') - if os.path.isfile(config_path) and not path in ignore: - modules.append(path) - # Make the key specified from command line if necessary. - if new_key: - if not os.path.isfile(os.path.join(private_key_path, key_name + ".biprivatekey")): - print_yellow("\nRequested key does not exist.") - try: - os.makedirs(private_key_path) - except: - pass - curDir = os.getcwd() - os.chdir(private_key_path) - ret = subprocess.call([dscreatekey, key_name]) # Created in make_root - os.chdir(curDir) - if ret == 0: - print_green("Created: " + os.path.join(private_key_path, key_name + ".biprivatekey")) - print("Removing any old signature keys...") - purge(os.path.join(module_root, release_dir, project, "addons"), "^.*\.bisign$","*.bisign") - purge(os.path.join(module_root, release_dir, project, "optionals"), "^.*\.bisign$","*.bisign") - purge(os.path.join(module_root, release_dir, project, "keys"), "^.*\.bikey$","*.bikey") else: - print_error("Failed to create key!") + print_green("\nNOTE: Using key {}".format(os.path.join(private_key_path, key_name + ".biprivatekey"))) try: print("Copying public key to release directory.") @@ -755,296 +961,276 @@ See the make.cfg file for additional build options. except: pass - shutil.copyfile(os.path.join(private_key_path, key_name + ".bikey"), os.path.join(module_root, release_dir, project, "keys", key_name + ".bikey")) + # Use biKeyNameAbrev to attempt to minimize problems from this BI Bug REFERENCE: http://feedback.arma3.com/view.php?id=22133 + biKeyNameAbrev = key_name.split("-")[0] + shutil.copyfile(os.path.join(private_key_path, key_name + ".bikey"), os.path.join(module_root, release_dir, project, "keys", biKeyNameAbrev + ".bikey")) except: print_error("Could not copy key to release directory.") raise - else: - print_green("\nNOTE: Using key " + os.path.join(private_key_path, key_name + ".biprivatekey")) + key = os.path.join(private_key_path, key_name + ".biprivatekey") - key = os.path.join(private_key_path, key_name + ".biprivatekey") + # Remove any obsolete files. + print_blue("\nChecking for obsolete files...") + obsolete_check_path = os.path.join(module_root, release_dir, project,"addons") + for file in os.listdir(obsolete_check_path): + if (file.endswith(".pbo") and os.path.isfile(os.path.join(obsolete_check_path,file))): + if check_for_obsolete_pbos(module_root, file): + fileName = os.path.splitext(file)[0] + print_yellow("Removing obsolete file => {}".format(file)) + purge(obsolete_check_path,fileName+"\..",fileName+".*") - # Remove any obsolete files. - print_blue("\nChecking for obsolete files...") - obsolete_check_path = os.path.join(module_root, release_dir, project,"addons") - for file in os.listdir(obsolete_check_path): - if (file.endswith(".pbo") and os.path.isfile(os.path.join(obsolete_check_path,file))): - if check_for_obsolete_pbos(module_root, file): - fileName = os.path.splitext(file)[0] - print_yellow("Removing obsolete file => " + file) - purge(obsolete_check_path,fileName+"\..",fileName+".*") + obsolete_check_path = os.path.join(module_root, release_dir, project) + for file in os.listdir(obsolete_check_path): + if (file.endswith(".dll") and os.path.isfile(os.path.join(obsolete_check_path,file))): + if check_for_obsolete_pbos(extensions_root, file): + fileName = os.path.splitext(file)[0] + print_yellow("Removing obsolete file => {}".format(file)) + try: + os.remove(os.path.join(obsolete_check_path,file)) + except: + print_error("\nFailed to delete {}".format(os.path.join(obsolete_check_path,file))) + pass - # For each module, prep files and then build. - print_blue("\nBuilding...") - for module in modules: - print_green("\nMaking " + module + "-"*max(1, (60-len(module)))) - missing = False - sigMissing = False + # For each module, prep files and then build. + print_blue("\nBuilding...") + for module in modules: + print_green("\nMaking {}".format(module + "-"*max(1, (60-len(module))))) + missing = False + sigMissing = False - # Cache check - if module in cache: - old_sha = cache[module] - else: - old_sha = "" + # Cache check + if module in cache: + old_sha = cache[module] + else: + old_sha = "" - #We always build ACE_common so we can properly show the correct version stamp in the RPT file. - if module == "common": - old_sha = "" + # Hash the module + new_sha = get_directory_hash(os.path.join(module_root, module)) - # Hash the module - new_sha = get_directory_hash(os.path.join(module_root, module)) + # Is the pbo or sig file missing? + missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module))) + sigFile = pbo_name_prefix+module + ".pbo." + key_name + ".bisign" + sigMissing = not os.path.isfile(os.path.join(release_dir, project, "addons", sigFile )) - # Is the pbo or sig file missing? - missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module))) - sigFile = pbo_name_prefix+module + ".pbo." + key_name + ".bisign" - sigMissing = not os.path.isfile(os.path.join(release_dir, project, "addons", sigFile )) + if missing: + print_yellow("Missing PBO file ace_{}.pbo".format(module) + ". Building...") - if missing: - print_yellow("Missing PBO file ace_{}.pbo".format(module) + ". Building...") + # Check if it needs rebuilt + # print ("Hash:", new_sha) + if old_sha == new_sha and not missing: + if not force_build: + print("Module has not changed.") + if sigMissing: + if key: + print("Missing Signature key {}".format(sigFile)) + build_signature_file(os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")) + # Skip everything else + continue - # Check if it needs rebuilt - # print ("Hash:", new_sha) - if old_sha == new_sha and not missing: - if not force_build: - print("Module has not changed.") - if sigMissing: - if key: - print("Missing Signature key " + sigFile) - build_signature_file(os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")) - # Skip everything else - continue + # Only do this if the project isn't stored directly on the work drive. + # Split the path at the drive name and see if they are on the same drive (usually P:) + if os.path.splitdrive(module_root)[0] != os.path.splitdrive(work_drive)[0]: + try: + # Remove old work drive version (ignore errors) + shutil.rmtree(os.path.join(work_drive, prefix, module), True) + + # Copy module to the work drive + shutil.copytree(module, os.path.join(work_drive, prefix, module)) + + except: + raise + print_error("ERROR: Could not copy module to work drive. Does the module exist?") + input("Press Enter to continue...") + print("Resuming build...") + continue + #else: + #print("WARNING: Module is stored on work drive ({}).".format(work_drive)) - # Only do this if the project isn't stored directly on the work drive. - # Split the path at the drive name and see if they are on the same drive (usually P:) - if os.path.splitdrive(module_root)[0] != os.path.splitdrive(work_drive)[0]: try: - # Remove old work drive version (ignore errors) - shutil.rmtree(os.path.join(work_drive, prefix, module), True) - - # Copy module to the work drive - shutil.copytree(module, os.path.join(work_drive, prefix, module)) + # Remove the old pbo, key, and log + old = os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module) + "*" + files = glob.glob(old) + for f in files: + os.remove(f) + if pbo_name_prefix: + old = os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module) + "*" + files = glob.glob(old) + for f in files: + os.remove(f) except: raise print_error("ERROR: Could not copy module to work drive. Does the module exist?") input("Press Enter to continue...") print("Resuming build...") continue - #else: - #print("WARNING: Module is stored on work drive (" + work_drive + ").") - try: - # Remove the old pbo, key, and log - old = os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module) + "*" - files = glob.glob(old) - for f in files: - os.remove(f) + # Build the module into a pbo + print_blue("Building: {}".format(os.path.join(work_drive, prefix, module))) + print_blue("Destination: {}".format(os.path.join(module_root, release_dir, project, "addons"))) - if pbo_name_prefix: - old = os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module) + "*" - files = glob.glob(old) - for f in files: - os.remove(f) - except: - raise - print_error("ERROR: Could not copy module to work drive. Does the module exist?") - input("Press Enter to continue...") - print("Resuming build...") - continue - - # Build the module into a pbo - print_blue("Building: " + os.path.join(work_drive, prefix, module)) - print_blue("Destination: " + os.path.join(module_root, release_dir, project, "addons")) - - # Make destination folder (if needed) - try: - os.makedirs(os.path.join(module_root, release_dir, project, "addons")) - except: - pass - - # Run build tool - build_successful = False - if build_tool == "pboproject": + # Make destination folder (if needed) try: - #PABST: Convert config (run the macro'd config.cpp through CfgConvert twice to produce a de-macro'd cpp that pboProject can read without fucking up: - shutil.copyfile(os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.backup")) - - os.chdir("P:\\") - - cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-bin", "-dst", os.path.join(work_drive, prefix, module, "config.bin"), os.path.join(work_drive, prefix, module, "config.cpp")] - ret = subprocess.call(cmd) - if ret != 0: - print_error("CfgConvert -bin return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.") - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - - cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-txt", "-dst", os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.bin")] - ret = subprocess.call(cmd) - if ret != 0: - print_error("CfgConvert -txt return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.") - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) + os.makedirs(os.path.join(module_root, release_dir, project, "addons")) + except: + pass - # Include build number + # Run build tool + build_successful = False + if build_tool == "pboproject": try: - configpath = os.path.join(work_drive, prefix, module, "config.cpp") - f = open(configpath, "r") - configtext = f.read() - f.close() + nobinFilePath = os.path.join(work_drive, prefix, module, "$NOBIN$") + + if (not os.path.isfile(nobinFilePath)): + backup_config(module) + convert_config(module) + + version_stamp_pboprefix(module,commit_id) + + if os.path.isfile(nobinFilePath): + print_green("$NOBIN$ Found. Proceeding with non-binarizing!") + cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"addons")] - if configtext: - patchestext = re.search(r"class CfgPatches\n\{(.*?)\n\}", configtext, re.DOTALL).group(1) - patchestext = re.sub(r'version(.*?)="(.*?)"', r'version\1="\2-{}"'.format(commit_id), patchestext) - configtext = re.sub(r"class CfgPatches\n\{(.*?)\n\}", "class CfgPatches\n{"+patchestext+"\n}", configtext, flags=re.DOTALL) - f = open(configpath, "w") - f.write(configtext) - f.close() else: - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) + if check_external: + cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + else: + cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "-X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + + color("grey") + if quiet: + devnull = open(os.devnull, 'w') + ret = subprocess.call(cmd, stdout=devnull) + devnull.close() + else: + ret = subprocess.call(cmd) + color("reset") + + if ret == 0: + print_green("pboProject return code == {}".format(str(ret))) + # Prettyprefix rename the PBO if requested. + if pbo_name_prefix: + try: + os.rename(os.path.join(module_root, release_dir, project, "addons", module+".pbo"), os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module+".pbo")) + except: + raise + print_error("Could not rename built PBO with prefix.") + # Sign result + if (key and not "ace_{}.pbo".format(module) in signature_blacklist): + print("Signing with {}.".format(key)) + if pbo_name_prefix: + ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")]) + else: + ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", module + ".pbo")]) + + if ret == 0: + build_successful = True + else: + build_successful = True + + if not build_successful: + print_error("pboProject return code == {}".format(str(ret))) + print_error("Module not successfully built/signed. Check your {}temp\{}_packing.log for more info.".format(work_drive,module)) + print ("Resuming build...") + continue + + # Back to the root + os.chdir(module_root) + except: raise - print_error("Failed to include build number") + print_error("Could not run Addon Builder.") + input("Press Enter to continue...") + print ("Resuming build...") continue + finally: + addon_restore(os.path.join(work_drive, prefix, module)) + elif build_tool== "addonbuilder": + # Detect $NOBIN$ and do not binarize if found. if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): - print_green("$NOBIN$ Found. Proceeding with non-binarizing!") - cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"addons")] - + do_binarize = False + print("$NOBIN$ file found in module, packing only.") else: - if check_external: - cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] + do_binarize = True + try: + # Call AddonBuilder + os.chdir("P:\\") + + cmd = [addonbuilder, os.path.join(work_drive, prefix, module), os.path.join(make_root, release_dir, project, "addons"), "-clear", "-project="+work_drive] + if not do_binarize: + cmd.append("-packonly") + + if quiet: + previousDirectory = os.getcwd() + os.chdir(arma3tools_path) + devnull = open(os.devnull, 'w') + ret = subprocess.call(cmd, stdout=devnull) + devnull.close() + os.chdir(previousDirectory) else: - cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "-X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"] - - color("grey") - if quiet: - devnull = open(os.devnull, 'w') - ret = subprocess.call(cmd, stdout=devnull) - devnull.close() - else: - ret = subprocess.call(cmd) - color("reset") - - if ret == 0: - print_green("pboProject return code == " + str(ret)) + previousDirectory = os.getcwd() + os.chdir(arma3tools_path) + print_error("Current directory - {}".format(os.getcwd())) + ret = subprocess.call(cmd) + os.chdir(previousDirectory) + print_error("Current directory - {}".format(os.getcwd())) + color("reset") + print_green("completed") # Prettyprefix rename the PBO if requested. if pbo_name_prefix: try: - os.rename(os.path.join(module_root, release_dir, project, "addons", module+".pbo"), os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module+".pbo")) + os.rename(os.path.join(make_root, release_dir, project, "addons", module+".pbo"), os.path.join(make_root, release_dir, project, "addons", pbo_name_prefix+module+".pbo")) except: raise print_error("Could not rename built PBO with prefix.") - # Sign result - if key: - print("Signing with " + key + ".") - if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")]) + + if ret == 0: + # Sign result + + #print_yellow("Sig_fileName: ace_{}.pbo".format(module)) + if (key and not "ace_{}.pbo".format(module) in signature_blacklist) : + print("Signing with {}.".format(key)) + if pbo_name_prefix: + ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")]) + else: + ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons", module + ".pbo")]) + + if ret == 0: + build_successful = True else: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", module + ".pbo")]) - - if ret == 0: build_successful = True - else: - build_successful = True - if not build_successful: - print_error("pboProject return code == " + str(ret)) - print_error("Module not successfully built/signed.") + if not build_successful: + print_error("Module not successfully built. Check your {}temp\{}_packing.log for more info.".format(work_drive,module)) + + # Back to the root + os.chdir(make_root) + + except: + raise + print_error("Could not run Addon Builder.") + input("Press Enter to continue...") print ("Resuming build...") continue - #PABST: cleanup config BS (you could comment this out to see the "de-macroed" cpp - #print_green("\Pabst (restoring): " + os.path.join(work_drive, prefix, module, "config.cpp")) - os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - os.remove(os.path.join(work_drive, prefix, module, "config.bin")) - os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - - # Back to the root - os.chdir(module_root) - - except: - raise - print_error("Could not run Addon Builder.") - input("Press Enter to continue...") - print ("Resuming build...") - continue - - elif build_tool== "addonbuilder": - # Detect $NOBIN$ and do not binarize if found. - if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): - do_binarize = False - print("$NOBIN$ file found in module, packing only.") else: - do_binarize = True - try: - # Call AddonBuilder - os.chdir("P:\\") + print_error("Unknown build_tool {}!".format(build_tool)) - cmd = [addonbuilder, os.path.join(work_drive, prefix, module), os.path.join(make_root, release_dir, project, "addons"), "-clear", "-project="+work_drive] - if not do_binarize: - cmd.append("-packonly") + # Update the hash for a successfully built module + if build_successful: + cache[module] = new_sha - if quiet: - previousDirectory = os.getcwd() - os.chdir(arma3tools_path) - devnull = open(os.devnull, 'w') - ret = subprocess.call(cmd, stdout=devnull) - devnull.close() - os.chdir(previousDirectory) - else: - previousDirectory = os.getcwd() - os.chdir(arma3tools_path) - print_error("Current directory - " + os.getcwd()) - ret = subprocess.call(cmd) - os.chdir(previousDirectory) - print_error("Current directory - " + os.getcwd()) - color("reset") - print_green("completed") - # Prettyprefix rename the PBO if requested. - if pbo_name_prefix: - try: - os.rename(os.path.join(make_root, release_dir, project, "addons", module+".pbo"), os.path.join(make_root, release_dir, project, "addons", pbo_name_prefix+module+".pbo")) - except: - raise - print_error("Could not rename built PBO with prefix.") + except Exception as e: + print_yellow("Cancel or some error detected: {}".format(e)) + - if ret == 0: - # Sign result - if key: - print("Signing with " + key + ".") - if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")]) - else: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons", module + ".pbo")]) - - if ret == 0: - build_successful = True - else: - build_successful = True - - if not build_successful: - print_error("Module not successfully built.") - - # Back to the root - os.chdir(make_root) - - except: - raise - print_error("Could not run Addon Builder.") - input("Press Enter to continue...") - print ("Resuming build...") - continue - - else: - print_error("Unknown build_tool " + build_tool + "!") - - # Update the hash for a successfully built module - if build_successful: - cache[module] = new_sha + finally: + copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) + cleanup_optionals(optionals_modules) # Done building all modules! @@ -1060,12 +1246,9 @@ See the make.cfg file for additional build options. except: print_error("ERROR: Could not delete pboProject temp files.") - copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) - cleanup_optionals(optionals_modules) - # Make release if make_release: - print_blue("\nMaking release: " + project + "-" + release_version + ".zip") + print_blue("\nMaking release: {}-{}.zip".format(project,release_version)) try: # Delete all log files @@ -1095,13 +1278,18 @@ See the make.cfg file for additional build options. else: a3_path = cygwin_a3path + print_yellow("Path from the registry => {}".format(a3_path)) + a3_path = test_dir + + print_yellow("Copying build files to {}".format(a3_path)) + if os.path.exists(a3_path): try: shutil.rmtree(os.path.join(a3_path, project), True) shutil.copytree(os.path.join(module_root, release_dir, project), os.path.join(a3_path, project)) except: print_error("Could not copy files. Is Arma 3 running?") - + print_green("\nDone.") diff --git a/tools/stringtablediag.py b/tools/stringtablediag.py index c4aab0b104..8cd585ac2a 100755 --- a/tools/stringtablediag.py +++ b/tools/stringtablediag.py @@ -57,14 +57,16 @@ def main(): projectpath = os.path.dirname(os.path.dirname(scriptpath)) projectpath = os.path.join(projectpath, "addons") - print("#########################") - print("# Stringtable Diag Tool #") - print("#########################") + if "--markdown" not in sys.argv: + print("#########################") + print("# Stringtable Diag Tool #") + print("#########################") languages = get_all_languages(projectpath) - print("\nLanguages present in the repo:") - print(", ".join(languages)) + if "--markdown" not in sys.argv: + print("\nLanguages present in the repo:") + print(", ".join(languages)) keysum = 0 localizedsum = list(map(lambda x: 0, languages)) @@ -76,31 +78,33 @@ def main(): if keynumber == 0: continue - print("\n# " + module) + if "--markdown" not in sys.argv: + print("\n# " + module) keysum += keynumber for i in range(len(localized)): - print(" %s %s / %i" % ((languages[i]+":").ljust(10), str(localized[i]).ljust(3), keynumber)) + if "--markdown" not in sys.argv: + print(" %s %s / %i" % ((languages[i]+":").ljust(10), str(localized[i]).ljust(3), keynumber)) localizedsum[i] += localized[i] if localized[i] < keynumber: missing[i].append(module) - print("\n###########") - print("# RESULTS #") - print("###########") + if "--markdown" not in sys.argv: + print("\n###########") + print("# RESULTS #") + print("###########") + print("\nTotal number of keys: %i\n" % (keysum)) - print("\nTotal number of keys: %i\n" % (keysum)) + for i in range(len(languages)): + if localizedsum[i] == keysum: + print("%s No missing stringtable entries." % ((languages[i] + ":").ljust(12))) + else: + print("%s %s missing stringtable entry/entries." % ((languages[i] + ":").ljust(12), str(keysum - localizedsum[i]).rjust(4)), end="") + print(" ("+", ".join(missing[i])+")") - for i in range(len(languages)): - if localizedsum[i] == keysum: - print("%s No missing stringtable entries." % ((languages[i] + ":").ljust(12))) - else: - print("%s %s missing stringtable entry/entries." % ((languages[i] + ":").ljust(12), str(keysum - localizedsum[i]).rjust(4)), end="") - print(" ("+", ".join(missing[i])+")") + print("\n\n### MARKDOWN ###\n") - print("\n\n### MARKDOWN ###") - - print("\nTotal number of keys: %i\n" % (keysum)) + print("Total number of keys: %i\n" % (keysum)) print("| Language | Missing Entries | Relevant Modules | % done |") print("|----------|----------------:|------------------|--------|") diff --git a/tools/stringtableduplicates.py b/tools/stringtableduplicates.py index b9b4920059..49f5bcb743 100755 --- a/tools/stringtableduplicates.py +++ b/tools/stringtableduplicates.py @@ -34,7 +34,7 @@ def check_module(projectpath, module): diff = len(entries) - len(list(set(entries))) duplicates += diff if diff > 0: - print key.getAttribute("ID") + print(key.getAttribute("ID")) return duplicates