Merge branch 'master' into interactionPrivates

Conflicts:
	addons/interaction/functions/fnc_addPassengerActions.sqf
	addons/interaction/functions/fnc_getDoorAnimations.sqf
	addons/interaction/functions/fnc_moduleInteraction.sqf
	addons/interaction/functions/fnc_moveDown.sqf
	addons/interaction/functions/fnc_removeTag.sqf
	addons/interaction/functions/fnc_showMouseHint.sqf
	addons/interaction/functions/fnc_updateTooltipPosition.sqf
This commit is contained in:
PabstMirror 2015-05-14 12:53:18 -05:00
commit ec38c8c951
736 changed files with 91353 additions and 5846 deletions

14
.travis.yml Normal file
View File

@ -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="

View File

@ -29,6 +29,7 @@ Walter Pearce <jaynus@gmail.com>
ACCtomeek <tomeek99@gmail.com>
Adanteh
aeroson
alef <alefor@gmail.com>
Aggr094 <bastards4glory@gmail.com>
Alganthe <alganthe@live.fr>
Anthariel <Contact@storm-simulation.com>
@ -72,9 +73,11 @@ Raspu86
Riccardo Petricca <petriccarcc@gmail.com>
Robert Boklahánics <bokirobi@gmail.com>
ramius86 <pasini86@hotmail.com>
SilentSpike <SilentSpike100@gmail.com>
simon84 <badguy360th@gmail.com>
Sniperwolf572 <tenga6@gmail.com>
Tachi <zaveruha007@gmail.com>
Toaster <jonathan.pereira@gmail.com>
Tonic
Tourorist <tourorist@gmail.com>
Valentin Torikian <valentin.torikian@gmail.com>
@ -91,4 +94,6 @@ VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
Bla1337
nikolauska <nikolauska1@gmail.com>
adam3adam <br.ada@seznam.cz>
Professor <lukas.trneny@wo.cz>
Professor <lukas.trneny@wo.cz>
Winter <simon@agius-muscat.net>
Dharma Bellamkonda <dharma.bellamkonda@gmail.com>

Binary file not shown.

Binary file not shown.

BIN
ace_clipboard.dll Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
z\ace\addons\advanced_ballistics

View File

@ -2,7 +2,7 @@ class CfgVehicles {
class ACE_Module;
class GVAR(ModuleSettings): ACE_Module {
scope = 2;
displayName = "Advanced Ballistics";
displayName = "$STR_ACE_AdvancedBallistics_DisplayName";
icon = QUOTE(PATHTOF(UI\Icon_Module_Wind_ca.paa));
category = "ACE";
function = QUOTE(DFUNC(initModuleSettings));
@ -12,26 +12,26 @@ class CfgVehicles {
author = "Ruthberg";
class Arguments {
class enabled {
displayName = "Advanced Ballistics";
description = "Enables advanced ballistics";
displayName = "$STR_ACE_AdvancedBallistics_enabled_DisplayName";
description = "$STR_ACE_AdvancedBallistics_enabled_Description";
typeName = "BOOL";
defaultValue = 0;
};
class alwaysSimulateForSnipers {
displayName = "Always Enabled For Snipers";
description = "Always enables advanced ballistics when high power optics are used";
displayName = "$STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_DisplayName";
description = "$STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_Description";
typeName = "BOOL";
defaultValue = 1;
};
class disabledInFullAutoMode {
displayName = "Disabled In FullAuto Mode";
description = "Disables the advanced ballistics during full auto fire";
displayName = "$STR_ACE_AdvancedBallistics_disabledInFullAutoMod_DisplayName";
description = "$STR_ACE_AdvancedBallistics_disabledInFullAutoMod_Description";
typeName = "BOOL";
defaultValue = 0;
};
class onlyActiveForLocalPlayers {
displayName = "Disabled For Non Local Players";
description = "Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer)";
displayName = "$STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_DisplayName";
description = "$STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_Description";
typeName = "BOOL";
defaultValue = 1;
};
@ -44,35 +44,38 @@ class CfgVehicles {
};
*/
class ammoTemperatureEnabled {
displayName = "Enable Ammo Temperature Simulation";
description = "Muzzle velocity varies with ammo temperature";
displayName = "$STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_DisplayName";
description = "$STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_Description";
typeName = "BOOL";
defaultValue = 1;
};
class barrelLengthInfluenceEnabled {
displayName = "Enable Barrel Length Simulation";
description = "Muzzle velocity varies with barrel length";
displayName = "$STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_DisplayName";
description = "$STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_Description";
typeName = "BOOL";
defaultValue = 1;
};
class bulletTraceEnabled {
displayName = "Enable Bullet Trace Effect";
description = "Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)";
displayName = "$STR_ACE_AdvancedBallistics_bulletTraceEnabled_DisplayName";
description = "$STR_ACE_AdvancedBallistics_bulletTraceEnabled_Description";
typeName = "BOOL";
defaultValue = 1;
};
class simulationInterval {
displayName = "Simulation Interval";
description = "Defines the interval between every calculation step";
displayName = "$STR_ACE_AdvancedBallistics_simulationInterval_DisplayName";
description = "$STR_ACE_AdvancedBallistics_simulationInterval_Description";
typeName = "NUMBER";
defaultValue = 0.0;
};
class simulationRadius {
displayName = "Simulation Radius";
description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles";
displayName = "$STR_ACE_AdvancedBallistics_simulationRadius_DisplayName";
description = "$STR_ACE_AdvancedBallistics_simulationRadius_Description";
typeName = "NUMBER";
defaultValue = 3000;
};
};
class ModuleDescription {
description = "$STR_ACE_AdvancedBallistics_Description";
};
};
};
};

View File

@ -4,24 +4,11 @@
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 versioning is in sync with cmake/build versioning

View File

@ -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;

View File

@ -4,7 +4,7 @@
* Calculates the ammo temperature induced muzzle velocity shift
*
* Arguments:
* 0: ammo - classname <string>
* 0: muzzle velocity shift lookup table - m/s <ARRAY>
* 1: temperature - degrees celcius <NUMBER>
*
* 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

View File

@ -4,9 +4,10 @@
* Calculates the muzzle velocity shift caused by different barrel lengths
*
* Arguments:
* 0: ammo - classname <string>
* 0: weapon - classname <string>
* 1: muzzle velocity - m/s <NUMBER>
* 0: barrel length - mm
* 1: muzzle velocity lookup table - m/s <ARRAY>
* 2: barrel length lookup table - mm <ARRAY>
* 3: muzzle velocity - m/s <NUMBER>
*
* Return Value:
* 0: muzzle velocity shift - m/s <NUMBER>
@ -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 };

View File

@ -4,10 +4,10 @@
* Calculates the stability factor of a bullet
*
* Arguments:
* 0: caliber - inches <NUMBER>
* 1: bullet length - inches <NUMBER>
* 2: bullet mass - grains <NUMBER>
* 3: barrel twist - inches <NUMBER>
* 0: caliber - mm <NUMBER>
* 1: bullet length - mm <NUMBER>
* 2: bullet mass - grams <NUMBER>
* 3: barrel twist - mm <NUMBER>
* 4: muzzle velocity shift - m/s <NUMBER>
* 5: temperature - degrees celcius <NUMBER>
* 6: barometric Pressure - hPA <NUMBER>
@ -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

View File

@ -1,78 +0,0 @@
/*
* Author: Ruthberg
*
* Calculates the true wind speed at a given world position
*
* Arguments:
* 0: _this - world position <posASL>
*
* Return Value:
* 0: wind speed - m/s <NUMBER>
*
* 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

View File

@ -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,7 +40,7 @@ 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 {
@ -48,19 +48,26 @@ if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then {
};
};
//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 (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;
@ -69,8 +76,8 @@ if (GVAR(barrelLengthInfluenceEnabled)) then {
};
if (GVAR(ammoTemperatureEnabled)) then {
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
_muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
_temperature = ((getPosASL _unit) select 2) call EFUNC(weather,calculateTemperatureAtHeight);
_muzzleVelocityShift = [_AmmoCacheEntry select 9, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
if (_muzzleVelocityShift != 0) then {
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
_bullet setVelocity _bulletVelocity;
@ -85,60 +92,27 @@ 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 {
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
_temperature = ((getPosASL _unit) select 2) call EFUNC(weather,calculateTemperatureAtHeight);
_barometricPressure = ((getPosASL _bullet) select 2) call EFUNC(weather,calculateBarometricPressure);
_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)]);

View File

@ -22,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";
};
};
@ -40,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;

View File

@ -0,0 +1,64 @@
/*
* Author: Ruthberg
*
* Reads the ammo class config and updates the config cache
*
* Arguments:
* 0: ammo - classname <string>
*
* Return Value:
* 0: [_airFriction, _caliber, _bulletLength, _bulletMass, _transonicStabilityCoef, _dragModel, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _ammoTempMuzzleVelocityShifts, _muzzleVelocityTable, _barrelLengthTable] <ARRAY>
*
* 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

View File

@ -0,0 +1,34 @@
/*
* Author: Ruthberg
*
* Reads the weapon class config and updates the config cache
*
* Arguments:
* 0: ammo - classname <string>
*
* Return Value:
* 0: [_barrelTwist, _twistDirection, _barrelLength] <ARRAY>
*
* 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

View File

@ -21,6 +21,5 @@
#define SPECIFIC_GAS_CONSTANT_DRY_AIR 287.058
#define STD_AIR_DENSITY_ICAO 1.22498
#define STD_AIR_DENSITY_ASM 1.20885
#define GET_TEMPERATURE_AT_HEIGHT(h) (EGVAR(weather,currentTemperature) - 0.0065 * (h))
#define EXTENSION_REQUIRED_VERSION "1.0"

View File

@ -11,6 +11,7 @@
<German>Windinformationen anzeigen</German>
<Hungarian>Széladatok mutatása</Hungarian>
<Czech>Zobrazit informace o větru</Czech>
<Portuguese>Mostrar Informação do Vento</Portuguese>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_ProtractorKey">
<English>Show Protractor</English>
@ -22,6 +23,87 @@
<German>Winkelmesser anzeigen</German>
<Hungarian>Szögmérő mutatása</Hungarian>
<Czech>Zobrazit úhloměr</Czech>
<Portuguese>Mostrar Transferidor</Portuguese>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_DisplayName">
<English>Advanced Ballistics</English>
<Polish>Zaawansowana balistyka</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_enabled_DisplayName">
<English>Advanced Ballistics</English>
<Polish>Zaawansowana balistyka</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_enabled_Description">
<English>Enables advanced ballistics</English>
<Polish>Aktywuje zaawansowaną balistykę</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_DisplayName">
<English>Always Enabled For Snipers</English>
<Polish>Zawsze akt. dla snajp.</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_Description">
<English>Always enables advanced ballistics when high power optics are used</English>
<Polish>Aktywuje zaawansowaną balistykę zawsze, kiedy używana jest optyka</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_disabledInFullAutoMod_DisplayName">
<English>Disabled In FullAuto Mode</English>
<Polish>Wył. podczas ognia auto.</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_disabledInFullAutoMod_Description">
<English>Disables the advanced ballistics during full auto fire</English>
<Polish>Dezaktywuje zaawansowaną balistykę podczas ognia automatycznego</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_DisplayName">
<English>Disabled For Non Local Players</English>
<Polish>Wyłącz dla nielok. graczy</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_Description">
<English>Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer)</English>
<Polish>Dezaktywuje zaawansowaną balistykę dla pocisków pochodzących od innych graczy(aktywuj tą opcję jeżeli odczuwasz spadki FPS podczas sporych strzelanin w MP)</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_DisplayName">
<English>Enable Ammo Temperature Simulation</English>
<Polish>Symulacja temp. amunicji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_Description">
<English>Muzzle velocity varies with ammo temperature</English>
<Polish>Prędkość wylotowa pocisku jest zależna od temperatury amunicji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_DisplayName">
<English>Enable Barrel Length Simulation</English>
<Polish>Symulacja długości lufy</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_Description">
<English>Muzzle velocity varies with barrel length</English>
<Polish>Prędkość wylotowa pocisku jest zależna od długości lufy</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_bulletTraceEnabled_DisplayName">
<English>Enable Bullet Trace Effect</English>
<Polish>Efekt smugi pocisku</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_bulletTraceEnabled_Description">
<English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English>
<Polish>Aktywuje efekt smugi pocisku dla pocisków wysokokalibrowych (widoczne tylko podczas patrzenia przez optykę)</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationInterval_DisplayName">
<English>Simulation Interval</English>
<Polish>Interwał symulacji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationInterval_Description">
<English>Defines the interval between every calculation step</English>
<Polish>Określa interwał pomiędzy każdym krokiem kalkulacji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationRadius_DisplayName">
<English>Simulation Radius</English>
<Polish>Zasięg symulacji</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_simulationRadius_Description">
<English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English>
<Polish>Określa obszar naokoło gracza (w metrach), na którym zaawansowana balistyka jest aplikowana dla pocisków</Polish>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_Description">
<English></English>
<Polish>Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki.</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -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};
};

View File

@ -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;

View File

@ -2,7 +2,7 @@
class CfgPatches {
class ADDON {
units[] = {"ACE_Comanche_Test"};
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Aircraft">
<Key ID="STR_ACE_Aircraft_CMFlareLauncher_Burst_Name">
@ -34,7 +34,7 @@
<Czech>Otevřít nákladní prostor</Czech>
<Hungarian>Rakodórámpa nyitása</Hungarian>
<Russian>Открыть грузовой отсек</Russian>
<Italian>Apri la porta del cargo</Italian>
<Italian>Apri la rampa di carico</Italian>
<Portuguese>Abrir porta de carga</Portuguese>
</Key>
<Key ID="STR_ACE_Aircraft_CloseCargoRamp">
@ -46,7 +46,7 @@
<Czech>Zavřít nákladní prostor</Czech>
<Hungarian>Rakodórámpa zárása</Hungarian>
<Russian>Закрыть грузовой отсек</Russian>
<Italian>Chiudi la porta del cargo</Italian>
<Italian>Chiudi la rampa di carico</Italian>
<Portuguese>Fechar porta de carga</Portuguese>
</Key>
</Package>

View File

@ -0,0 +1 @@
z\ace\addons\atragmx

View File

@ -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[]={};

View File

@ -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)];

View File

@ -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;

View File

@ -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);
};
};

View File

@ -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);
};
};

View File

@ -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

View File

@ -15,6 +15,8 @@
*/
#include "script_component.hpp"
GVAR(active) = false;
GVAR(workingMemory) = +(GVAR(gunList) select 0);
GVAR(scopeUnits) = ["MILs", "TMOA", "SMOA", "Clicks"];

View File

@ -0,0 +1,4 @@
#include "script_component.hpp"
uiNamespace setVariable ['ATragMX_Display', nil];
GVAR(active) = false;

View File

@ -95,36 +95,6 @@ if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) t
GVAR(workingMemory) set [1, _muzzleVelocity];
GVAR(workingMemory) set [2, _zeroRange];
private ["_elevationCur", "_windageCur", "_clickSize", "_clickNumber", "_clickInterval"];
_elevationCur = GVAR(workingMemory) select 10;
_windageCur = GVAR(workingMemory) select 11;
switch (GVAR(currentScopeUnit)) do {
case 0: {
_elevationCur = _elevationCur * 3.38;
_windageCur = _windageCur * 3.38;
};
case 2: {
_elevationCur = _elevationCur / 1.047;
_windageCur = _windageCur / 1.047;
};
case 3: {
switch (GVAR(workingMemory) select 7) do {
case 0: { _clickSize = 1; };
case 1: { _clickSize = 1 / 1.047; };
case 2: { _clickSize = 3.38; };
};
_clickNumber = GVAR(workingMemory) select 8;
_clickInterval = _clickSize / _clickNumber;
_elevationCur = Round(_elevationCur / _clickInterval);
_windageCur = Round(_windageCur / _clickInterval);
};
};
GVAR(workingMemory) set [10, _elevationCur];
GVAR(workingMemory) set [11, _windageCur];
[] call FUNC(update_gun);
[] call FUNC(update_gun_ammo_data);
[] call FUNC(update_atmosphere);

View File

@ -2,7 +2,7 @@
{
// Conditions: canInteract
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
if (GVAR(active)) exitWith {false};
// Statement
[] call FUNC(create_dialog);
false

View File

@ -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

View File

@ -23,6 +23,7 @@
<Italian>Apri ATragMX</Italian>
<Hungarian>ATragMX elővétele</Hungarian>
<Czech>Otevřít ATragMX</Czech>
<Portuguese>Abrir ATragMX</Portuguese>
</Key>
<Key ID="STR_ACE_ATragMX_Description">
<English>Rugged PDA with ATragMX</English>
@ -34,6 +35,7 @@
<Italian>PDA Robusto con ATragMX</Italian>
<Hungarian>Megerősített PDA, ATragMX-el</Hungarian>
<Czech>PDA s ATragMX</Czech>
<Portuguese>PDA Robusto com ATragMX</Portuguese>
</Key>
<Key ID="STR_ACE_ATragMX_ATragMXDialogKey">
<English>Open ATragMX</English>
@ -45,6 +47,7 @@
<Italian>Apri ATragMX</Italian>
<Hungarian>ATragMX elővétele</Hungarian>
<Czech>Otevřít ATragMX</Czech>
<Portuguese>Abrir ATragMX</Portuguese>
</Key>
</Package>
</Project>

View File

@ -8,7 +8,7 @@
<Polish>Przyczep przedmiot &gt;&gt;</Polish>
<French>Attacher l'objet &gt;&gt;</French>
<Czech>Připnout předmět &gt;&gt;</Czech>
<Portuguese>Acoplar item &gt;&gt;</Portuguese>
<Portuguese>Fixar item &gt;&gt;</Portuguese>
<Italian>Attacca l'oggetto &gt;&gt;</Italian>
<Hungarian>Tárgy hozzácsatolása &gt;&gt;</Hungarian>
<Russian>Прикрепить предмет</Russian>
@ -20,7 +20,7 @@
<Polish>Przyczep</Polish>
<French>Attacher</French>
<Czech>Připnout</Czech>
<Portuguese>Acoplar</Portuguese>
<Portuguese>Fixar</Portuguese>
<Italian>Attacca</Italian>
<Hungarian>Hozzácsatolás</Hungarian>
<Russian>Прикрепить</Russian>
@ -44,7 +44,7 @@
<Polish>Przyczepiono stroboskop IR</Polish>
<French>Balise IR attachée</French>
<Czech>IR Značkovač připnutý</Czech>
<Portuguese>Marcador IV Acoplado</Portuguese>
<Portuguese>Marcador IV Fixado</Portuguese>
<Italian>Strobo IR attaccata</Italian>
<Hungarian>Infravörös jeladó hozzácsatolva</Hungarian>
<Russian>ИК-маяк прикреплён</Russian>
@ -68,7 +68,7 @@
<Polish>Przyczepiono granat IR</Polish>
<French>Grenade IR attachée</French>
<Czech>IR Granát připnutý</Czech>
<Portuguese>Granada IV Acoplada</Portuguese>
<Portuguese>Granada IV Fixada</Portuguese>
<Italian>Granata IR attaccata</Italian>
<Hungarian>Infravörös gránát hozzácsatolva</Hungarian>
<Russian>ИК-граната прикреплена</Russian>
@ -92,7 +92,7 @@
<Polish>Przyczepiono światło chemiczne</Polish>
<French>Chemlight attachée</French>
<Czech>Chemické světlo připnuto</Czech>
<Portuguese>Chemlight Acoplada</Portuguese>
<Portuguese>Chemlight Fixada</Portuguese>
<Italian>Chemlight attaccata</Italian>
<Hungarian>Chemlight hozzácsatolva</Hungarian>
<Russian>Химсвет прикреплён</Russian>
@ -176,10 +176,10 @@
<Russian>Не удалось присоединить</Russian>
<Spanish>Error al acoplar</Spanish>
<Czech>Připnutí selhalo</Czech>
<Portuguese>Erro ao anexar</Portuguese>
<Portuguese>Erro ao fixar</Portuguese>
<Polish>Przyczepianie nie powiodło się</Polish>
<Hungarian>Hozzácsatolás sikertelen</Hungarian>
<Italian>Impossibile Attaccare</Italian>
<Italian>Non si attacca</Italian>
</Key>
<Key ID="STR_ACE_Attach_Item_Attached">
<English>%1&lt;br/&gt;Attached</English>
@ -188,7 +188,7 @@
<Polish>%1&lt;br/&gt;przyczepiono</Polish>
<French>%1&lt;br/&gt;attachée</French>
<Czech>%1&lt;br/&gt;Připnutý</Czech>
<Portuguese>%1&lt;br/&gt;Acoplada</Portuguese>
<Portuguese>%1&lt;br/&gt;Fixada</Portuguese>
<Italian>%1&lt;br/&gt;attaccata</Italian>
<Hungarian>%1&lt;br/&gt;hozzácsatolva</Hungarian>
<Russian>%1&lt;br/&gt;присоединен(-а)</Russian>

View File

@ -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};
};
};

View File

@ -190,7 +190,7 @@ class CfgVehicles {
class ACE_Box_Ammo: NATO_Box_Base {
scope = 2;
accuracy = 1000;
displayName = "[ACE] Ammo Supply Crate";
displayName = "$STR_ACE_AmmoSupplyCrate_DisplayName";
model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F";
author = "$STR_ACE_Common_ACETeam";
class TransportMagazines {

View File

@ -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,8 +512,8 @@ 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[] = {
@ -518,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[] = {
@ -542,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[] = {
@ -555,8 +564,8 @@ 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[] = {
@ -570,18 +579,18 @@ 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[] = {
@ -595,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 {
@ -615,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 */
@ -642,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";
@ -675,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";
@ -708,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";
@ -741,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";
@ -774,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";
@ -807,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";
@ -840,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";
@ -873,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";
@ -906,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";

View File

@ -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)

View File

@ -375,6 +375,8 @@
<Russian>Лента из 130-ти .338 NM трассирующих</Russian>
<Italian>.338 NM 130Rnd Tracciante Belt</Italian>
<Czech>.338 NM 130náb. Svítící Pás </Czech>
<Portuguese>Cinto de munição .338 NM com 130 cartuchos</Portuguese>
<Hungarian>.338 NM 130-lövedékes nyomkövető heveder</Hungarian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_TracerNameShort">
<English>.338 NM Tracer</English>
@ -385,6 +387,8 @@
<Spanish>.338 NM Trazadora</Spanish>
<Russian>.338 NM трассирующие</Russian>
<Italian>.338 NM 130Rnd Tracciante</Italian>
<Portuguese>.338 NM Traçante</Portuguese>
<Hungarian>.338 NM nyomkövető</Hungarian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_TracerDescription">
<English>Caliber: .338 Norma Magnum Tracer&lt;br /&gt;Rounds: 130&lt;br /&gt;Used in: SPMG</English>
@ -395,6 +399,8 @@
<Russian>Калибр: .338 Norma Magnum трассирующие&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются в: SPMG</Russian>
<Italian>Calibro: .338 Norma Magnum Tracciante&lt;br /&gt;Munizioni: 130&lt;br /&gt;In uso su: SPMG</Italian>
<Czech>Ráže: .338 Noma Magnum Svítící&lt;br /&gt;Munice: 130&lt;br /&gt;Použití: SPMG</Czech>
<Portuguese>Calibre: .338 Norma Magnum Traçante&lt;br /&gt;Cartuchos: 130&lt;br /&gt;Usado em: SPMG</Portuguese>
<Hungarian>Kaliber: .338 Norma Magnum nyomkövető&lt;br /&gt;Lövedékek: 130&lt;br /&gt;Használható: SPMG</Hungarian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimName">
<English>.338 NM 130Rnd IR-DIM Belt</English>
@ -405,6 +411,8 @@
<Russian>Лента из 130-ти .338 NM ИК-трассирующих</Russian>
<Italian>.338 NM 130Rnd IR-DIM Belt</Italian>
<Czech>.338 NM 130náb. IR-DIM Pás</Czech>
<Portuguese>Cinto de munição traçante .338 NM IR-DIM com 130 cartuchos</Portuguese>
<Hungarian>.338 NM 130-lövedékes infravörös nyomkövető heveder</Hungarian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort">
<English>.338 NM IR-DIM</English>
@ -415,6 +423,8 @@
<Spanish>.338 NM IR-DIM</Spanish>
<Russian>.338 NM ИК-трассирующие</Russian>
<Italian>.338 NM IR-DIM</Italian>
<Portuguese>.338 NM IR-DIM</Portuguese>
<Hungarian>.338 NM infravörös nyomkövető</Hungarian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimDescription">
<English>Caliber: .338 Norma Magnum Tracer IR-DIM&lt;br /&gt;Rounds: 130&lt;br /&gt;Used in: SPMG</English>
@ -425,6 +435,8 @@
<Russian>Калибр: .338 Norma Magnum ИК-трассирующие&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются с: SPMG</Russian>
<Italian>Calibro: .338 Norma Magnum Tracciante IR-DIM&lt;br /&gt;Munizioni: 130&lt;br /&gt;In uso su: SPMG</Italian>
<Czech>Ráže: .338 Noma Magnum Svítící IR-DIM&lt;br /&gt;Munice: 130&lt;br /&gt;Použití: SPMG</Czech>
<Portuguese>Calibre: .338 Norma Magnum Traçante IR-DIM&lt;br /&gt;Cartuchos: 130&lt;br /&gt;Usado em: SPMG</Portuguese>
<Hungarian>Kaliber: .338 Norma Magnum infravörös nyomkövető&lt;br /&gt;Lövedékek: 130&lt;br /&gt;Használható: SPMG</Hungarian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_APName">
<English>.338 NM 130Rnd AP Belt</English>
@ -435,6 +447,8 @@
<Russian>Лента из 130-ти .338 NM бронебойных</Russian>
<Italian>.338 NM 130Rnd AP Belt</Italian>
<Czech>.338 NM 130náb. AP Pás</Czech>
<Portuguese>Cinto de munição .338 NM com 130 cartuchos AP</Portuguese>
<Hungarian>.338 NM 130-lövedékes páncéltörő heveder</Hungarian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_APNameShort">
<English>.338 NM AP</English>
@ -445,6 +459,8 @@
<Spanish>.338 NM AP</Spanish>
<Russian>.338 NM бронебойные</Russian>
<Italian>.338 NM AP</Italian>
<Portuguese>.338 NM AP</Portuguese>
<Hungarian>.338 NM páncéltörő</Hungarian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_APDescription">
<English>Caliber: .338 Norma Magnum AP&lt;br /&gt;Rounds: 130&lt;br /&gt;Used in: SPMG</English>
@ -455,6 +471,8 @@
<Russian>Калибр: .338 Norma Magnum бронебойные&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются с: SPMG</Russian>
<Italian>Calibro: .338 Norma Magnum AP&lt;br /&gt;Munizioni: 130&lt;br /&gt;In uso su: SPMG</Italian>
<Czech>Ráže: .338 Noma Magnum AP&lt;br /&gt;Munice: 130&lt;br /&gt;Použití: SPMG</Czech>
<Portuguese>Calibre: .338 Norma Magnum AP&lt;br /&gt;Cartuchos: 130&lt;br /&gt;Usado em: SPMG</Portuguese>
<Hungarian>Kaliber: .338 Norma Magnum páncéltörő&lt;br /&gt;Lövedékek: 130&lt;br /&gt;Használható: SPMG</Hungarian>
</Key>
<!-- 9.3x64mm 10Rnd -->
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerName">
@ -465,7 +483,9 @@
<Spanish>Cargador de 10 balas trazadoras de 9.3mm</Spanish>
<Russian>Магазин из 10-ти 9,3 мм трассирующих</Russian>
<Italian>9.3mm 10Rnd Tracer Mag</Italian>
<Czech>9.3mm 10Rnd Svítící Zásobník</Czech>
<Czech>9.3mm 10náb. Svítící Zásobník</Czech>
<Portuguese>Carregador de 10 cartuchos 9.3mm traçantes </Portuguese>
<Hungarian>9,3mm 10-lövedékes nyomkövető tár</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerNameShort">
<English>9.3mm Tracer</English>
@ -476,6 +496,8 @@
<Spanish>9.3mm Trazadora</Spanish>
<Russian>9,3 мм трассирующие</Russian>
<Italian>9.3mm Tracer</Italian>
<Portuguese>9.3mm Traçante</Portuguese>
<Hungarian>9,3mm nyomkövető</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerDescription">
<English>Caliber: 9.3x64mm Tracer&lt;br /&gt;Rounds: 10&lt;br /&gt;Used in: Cyrus</English>
@ -486,6 +508,8 @@
<Russian>Калибр: 9,3x64 мм трассирующие&lt;br /&gt;Патронов: 10&lt;br /&gt;Используются с: Cyrus</Russian>
<Italian>Calibro: 9.3x64mm Tracer&lt;br /&gt;Munizioni: 10&lt;br /&gt;In uso su: Cyrus</Italian>
<Czech>Ráže: 9.3x64mm Svítící&lt;br /&gt;Munice: 10&lt;br /&gt;Použití: Cyrus</Czech>
<Portuguese>Calibre: 9.3x64mm Traçante&lt;br /&gt;Cartuchos: 10&lt;br /&gt;Usado em: Cyrus</Portuguese>
<Hungarian>Kaliber: 9,3x64mm nyomkövető&lt;br /&gt;Lövedékek: 10&lt;br /&gt;Használható: Cyrus</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimName">
<English>9.3mm 10Rnd Tracer IR-DIM Mag</English>
@ -496,6 +520,8 @@
<Russian>Магазин из 10-ти 9,3 мм ИК-трассирующих</Russian>
<Italian>9.3mm 10Rnd Tracciante IR-DIM Mag</Italian>
<Czech>9.3mm 10náb. Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador de 10 cartuchos 9.3mm traçantes IR-DIM</Portuguese>
<Hungarian>9,3mm 10-lövedékes infravörös nyomkövető tár</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimNameShort">
<English>9.3mm IR-DIM</English>
@ -506,6 +532,8 @@
<Spanish>9.3mm IR-DIM</Spanish>
<Russian>9,3 мм ИК-трассирующие</Russian>
<Italian>9.3mm IR-DIM</Italian>
<Portuguese>9.3mm IR-DIM</Portuguese>
<Hungarian>9,3mm infravörös nyomkövető</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimDescription">
<English>Caliber: 9.3x64mm Tracer IR-DIM&lt;br /&gt;Rounds: 10&lt;br /&gt;Used in: Cyrus</English>
@ -516,6 +544,8 @@
<Russian>Калибр: 9,3x64 мм ИК-трассирующие&lt;br /&gt;Патронов: 10&lt;br /&gt;Используются с: Cyrus</Russian>
<Italian>Calibro: 9.3x64mm Tracciante IR-DIM&lt;br /&gt;Munizioni: 10&lt;br /&gt;In uso su: Cyrus</Italian>
<Czech>Ráže: 9.3x64mm Svítící IR-DIM&lt;br /&gt;Munice: 10&lt;br /&gt;Použití: Cyrus</Czech>
<Portuguese>Calibre: 9.3x64mm Traçante IR-DIM&lt;br /&gt;Cartuchos: 10&lt;br /&gt;Usado em: Cyrus</Portuguese>
<Hungarian>Kaliber: 9,3x64mm infravörös nyomkövető&lt;br /&gt;Lövedékek: 10&lt;br /&gt; Használható: Cyrus</Hungarian>
</Key>
<!-- 9.3x64mm 150Rnd Belt-->
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerName">
@ -527,6 +557,8 @@
<Russian>Лента из 150-ти 9,3 мм трассирующих</Russian>
<Italian>9.3mm 150Rnd Tracer Belt</Italian>
<Czech>9.3mm 150náb. Svítící Pás</Czech>
<Portuguese>Cinto de munição traçante 9.3mm com 150 cartuchos</Portuguese>
<Hungarian>9,3mm 150-lövedékes nyomkövető heveder</Hungarian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerNameShort">
<English>9.3mm Tracer</English>
@ -537,6 +569,8 @@
<Spanish>9.3mm Trazadora</Spanish>
<Russian>9,3 мм трассирующие</Russian>
<Italian>9.3mm Tracciante</Italian>
<Portuguese>9.3mm Traçante</Portuguese>
<Hungarian>9,3mm nyomkövető</Hungarian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerDescription">
<English>Caliber: 9.3x64mm Tracer&lt;br /&gt;Rounds: 150&lt;br /&gt;Used in: Navid</English>
@ -547,6 +581,8 @@
<Russian>Калибр: 9,3x64 мм трассирующие&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian>
<Italian>Calibro: 9.3x64mm Tracciante&lt;br /&gt;Munizioni: 150&lt;br /&gt;In uso su: Navid</Italian>
<Czech>Ráže: 9.3x64mm Svítící&lt;br /&gt;Munice: 150&lt;br /&gt;Použití: Navid</Czech>
<Portuguese>Calibre: 9.3x64mm Traçante&lt;br /&gt;Cartuchos: 150&lt;br /&gt;Usado em: Navid</Portuguese>
<Hungarian>Kaliber: 9,3x64mm nyomkövető&lt;br /&gt;Lövedékek: 150&lt;br /&gt;Használható: Navid</Hungarian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimName">
<English>9.3mm 150Rnd Tracer IR-DIM Belt</English>
@ -557,6 +593,8 @@
<Russian>Лента из 150-ти 9,3 мм ИК-трассирующих</Russian>
<Italian>9.3mm 150Rnd Tracciante IR-DIM Belt</Italian>
<Czech>9.3mm 150náb. Svítící IR-DIM Pás</Czech>
<Portuguese>Cinto de munição traçante 9.3mm IR-DIM com 150 cartuchos</Portuguese>
<Hungarian>9,3mm 150-lövedékes infravörös nyomkövető heveder</Hungarian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimNameShort">
<English>9.3mm IR-DIM</English>
@ -567,6 +605,8 @@
<Spanish>9.3mm IR-DIM</Spanish>
<Russian>9,3 мм ИК-трассирующие</Russian>
<Italian>9.3mm IR-DIM</Italian>
<Portuguese>9.3mm IR-DIM</Portuguese>
<Hungarian>9,3mm infravörös nyomkövető</Hungarian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimDescription">
<English>Caliber: 9.3x64mm Tracer IR-DIM&lt;br /&gt;Rounds: 150&lt;br /&gt;Used in: Navid</English>
@ -577,6 +617,8 @@
<Russian>Калибр: 9,3x64 мм ИК-трассирующие&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian>
<Italian>Calibro: 9.3x64mm Tracciante IR-DIM&lt;br /&gt;Munizioni: 150&lt;br /&gt;In uso su: Navid</Italian>
<Czech>Ráže: 9.3x64mm Svítící IR-DIM&lt;br /&gt;Munice: 150&lt;br /&gt;Použití: Navid</Czech>
<Portuguese>Calibre: 9.3x64mm Traçante IR-DIM&lt;br /&gt;Cartuchos: 150&lt;br /&gt;Usado em: Navid</Portuguese>
<Hungarian>Kaliber: 9,3x64mm infravörös nyomkövető&lt;br /&gt;Lövedékek: 150&lt;br /&gt;Használható: Navid</Hungarian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_APName">
<English>9.3mm 150Rnd AP Belt</English>
@ -587,6 +629,8 @@
<Russian>Лента из 150-ти 9,3 мм бронебойных</Russian>
<Italian>9.3mm 150Rnd AP Belt</Italian>
<Czech>9.3mm 150náb. AP Pás</Czech>
<Portuguese>Cinto de munição 9.3mm AP com 150 cartuchos</Portuguese>
<Hungarian>9,3mm 150-lövedékes páncéltörő heveder</Hungarian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_APNameShort">
<English>9.3mm AP</English>
@ -597,6 +641,8 @@
<Spanish>9.3mm AP</Spanish>
<Russian>9,3 мм бронебойные</Russian>
<Italian>9.3mm AP</Italian>
<Portuguese>9.3mm AP</Portuguese>
<Hungarian>9,3mm páncéltörő</Hungarian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_APDescription">
<English>Caliber: 9.3x64mm AP&lt;br /&gt;Rounds: 150&lt;br /&gt;Used in: Navid</English>
@ -607,6 +653,8 @@
<Russian>Калибр: 9,3x64 мм бронебойные&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian>
<Italian>Calibro: 9.3x64mm AP&lt;br /&gt;Munizioni: 150&lt;br /&gt;In uso su: Navid</Italian>
<Czech>Ráže: 9.3x64mm AP&lt;br /&gt;Munice: 150&lt;br /&gt;Použití: Navid</Czech>
<Portuguese>Calibre: 9.3x64mm AP&lt;br /&gt;Cartuchos: 150&lt;br /&gt;Usado em: Navid</Portuguese>
<Hungarian>Kaliber: 9,3x64mm páncéltörő&lt;br /&gt;Lövedékek: 150&lt;br /&gt;Használható: Navid</Hungarian>
</Key>
<Key ID="STR_ACE_16Rnd_9x19_mag_Name">
<English>9x19mm 16Rnd Mag</English>
@ -617,6 +665,8 @@
<German>9x19mm 20-Patronen-Magazin</German>
<Italian>9x19mm 16Rnd Mag</Italian>
<Czech>9x19mm 16náb. Zásobník</Czech>
<Portuguese>Carregador de 16 cartuchos 9x19mm</Portuguese>
<Hungarian>9x19mm 16-lövedékes tár</Hungarian>
</Key>
<Key ID="STR_ACE_16Rnd_9x19_mag_NameShort">
<English>9x19mm</English>
@ -627,6 +677,8 @@
<German>9x19mm</German>
<Italian>9x19mm</Italian>
<Czech>9x19mm</Czech>
<Portuguese>9x19mm</Portuguese>
<Hungarian>9x19mm</Hungarian>
</Key>
<Key ID="STR_ACE_16Rnd_9x19_mag_Description">
<English>9x19mm 30Rnd Mag</English>
@ -637,6 +689,8 @@
<German>9x19mm 30-Patronen-Magazin</German>
<Italian>9x19mm 30Rnd Mag</Italian>
<Czech>9x19mm 30náb. Zásobník</Czech>
<Portuguese>Carregador de 16 cartuchos 9x19mm</Portuguese>
<Hungarian>9x19mm 16-lövedékes tár</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_9x19_mag_Name">
<English>9x19mm 30Rnd Mag</English>
@ -647,6 +701,8 @@
<German>9x19mm 30-Patronen-Magazin</German>
<Italian>9x19mm 30Rnd Mag</Italian>
<Czech>9x19mm 30náb. Zásobník</Czech>
<Portuguese>Carregador de 30 cartuchos 9x19mm</Portuguese>
<Hungarian>9x19mm 30-lövedékes tár</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_9x19_mag_NameShort">
<English>9x19mm</English>
@ -657,6 +713,8 @@
<German>9x19mm</German>
<Italian>9x19mm</Italian>
<Czech>9x19mm</Czech>
<Portuguese>9x19mm</Portuguese>
<Hungarian>9x19mm</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_9x19_mag_Description">
<English>9x19mm 30Rnd Mag</English>
@ -667,6 +725,8 @@
<German>9x19mm 30-Patronen-Magazin</German>
<Italian>9x19mm 30Rnd Mag</Italian>
<Czech>9x19mm 30náb. Zásobník</Czech>
<Portuguese>Carregador de 30 cartuchos 9x19mm</Portuguese>
<Hungarian>9x19mm 30-lövedékes tár</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Name">
<English>7.62x54mm 10Rnd Tracer Mag</English>
@ -677,6 +737,8 @@
<German>7,62x54mm 10-Patronen-Magazin Leuchtspur</German>
<Italian>7.62x54mm 10Munizioni Traccianti IR-DIM Mag</Italian>
<Czech>7.62x54mm 10náb. Svítící Zásobník</Czech>
<Portuguese>Carregador com 10 cartuchos 7.62x54mm Traçante</Portuguese>
<Hungarian>7,62x54mm 10-lövedékes nyomkövető tár</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_NameShort">
<English>7.62mm</English>
@ -684,9 +746,11 @@
<French>7.62mm</French>
<Spanish>7.62mm</Spanish>
<Russian>7,62 мм</Russian>
<German>7,62x54mm </German>
<Italian>7.62mm IR-DIM</Italian>
<German>7,62mm</German>
<Italian>7.62mm</Italian>
<Czech>7.62mm</Czech>
<Portuguese>7.62mm</Portuguese>
<Hungarian>7,62mm</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Description">
<English>7.62x54mm 10Rnd Tracer Mag</English>
@ -697,6 +761,8 @@
<German>7,62x54mm 10-Patronen-Magazin Leuchtspur</German>
<Italian>7.62x54mm 10Munizioni Traccianti IR-DIM Mag</Italian>
<Czech>7.62x54mm 10náb. Svítící Zásobník</Czech>
<Portuguese>Carregador com 10 cartuchos 7.62x54mm Traçante</Portuguese>
<Hungarian>7,62x54mm 10-lövedékes nyomkövető tár</Hungarian>
</Key>
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimName">
<English>6.5mm 100Rnd Tracer IR-DIM Mag</English>
@ -707,6 +773,8 @@
<German>6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur</German>
<Italian>6.5mm 100Munizioni Traccianti IR-DIM Mag</Italian>
<Czech>6.5mm 100náb. Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador com 100 cartuchos 6.5mm IR-DIM Traçante</Portuguese>
<Hungarian>6,5mm 100-lövedékes infravörös nyomkövető tár</Hungarian>
</Key>
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English>
@ -717,6 +785,8 @@
<German>6,5mm IR-DIM </German>
<Italian>6.5mm IR-DIM</Italian>
<Czech>6.5mm IR-DIM</Czech>
<Portuguese>6.5mm IR-DIM</Portuguese>
<Hungarian>6,5mm infravörös nyomkövető</Hungarian>
</Key>
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimDescription">
<English>6.5mm 100Rnd Tracer IR-DIM Mag&lt;br /&gt;Rounds: 100&lt;br /&gt;Used in: MX LSW</English>
@ -727,6 +797,8 @@
<German>6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur&lt;br /&gt;Patronen: 100&lt;br /&gt;Eingesetzt von: MXLSW</German>
<Italian>6.5mm 100Rnd Tracer IR-DIM Mag&lt;br /&gt;Munizioni: 100&lt;br /&gt;In uso su: MX LSW</Italian>
<Czech>6.5mm 100náb. Svítící IR-DIM Zásobník&lt;br /&gt;Munice: 100&lt;br /&gt;Použití: MX LSW</Czech>
<Portuguese>Carregador 6.5mm 100 Cartuchos Traçantes IR-DIM&lt;br /&gt;Cartuchos: 100&lt;br /&gt;Usado em: MX LSW</Portuguese>
<Hungarian>6.5mm 100-lövedékes infravörös nyomkövető tár&lt;br /&gt;Lövedékek: 100&lt;br /&gt;Használható: MX LSW</Hungarian>
</Key>
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimName">
<English>6.5mm 200Rnd Tracer IR-DIM Belt</English>
@ -737,6 +809,8 @@
<German>6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur</German>
<Italian>6.5mm 200Rnd Tracer IR-DIM Belt</Italian>
<Czech>6.5mm 200náb. Svítící IR-DIM Pás</Czech>
<Portuguese>Cinto de munição traçante 6.5mm IR-DIM com 200 cartuchos</Portuguese>
<Hungarian>6,5mm 200-lövedékes infravörös nyomkövető heveder</Hungarian>
</Key>
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English>
@ -747,6 +821,8 @@
<German>6,5mm IR-DIM</German>
<Italian>6.5mm IR-DIM</Italian>
<Czech>6.5mm IR-DIM</Czech>
<Portuguese>6.5mm IR-DIM</Portuguese>
<Hungarian>6,5mm infravörös nyomkövető</Hungarian>
</Key>
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimDescription">
<English>6.5mm 200Rnd Tracer IR-DIM Belt&lt;br /&gt;Rounds: 200&lt;br /&gt;Used in: Stoner 99 LMG</English>
@ -757,6 +833,8 @@
<German>6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur&lt;br /&gt;Patronen: 200&lt;br /&gt;Eingesetzt von: Stoner 99 LMG</German>
<Italian>6.5mm 200Rnd Tracer IR-DIM Belt&lt;br /&gt;Munizioni: 200&lt;br /&gt;In uso su: Stoner 99 LMG</Italian>
<Czech>6.5mm 200náb. Svítící IR-DIM Pás&lt;br /&gt;Munice: 200&lt;br /&gt;Použití: Stoner 99 LMG</Czech>
<Portuguese>Cinto de munição traçante 6.5mm IR-DIM com 200 cartuchos&lt;br /&gt;Cartuchos: 200&lt;br /&gt;Usado em: Stoner 99 LMG</Portuguese>
<Hungarian>6.5mm 200-lövedékes infravörös nyomkövető heveder&lt;br /&gt;Lövedékek: 200&lt;br /&gt;Használható: Stoner 99 LMG</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Name">
<English>5.56mm 30Rnd Mag (Mk262)</English>
@ -767,6 +845,8 @@
<German>5,56mm 30-Patronen-Magazin (Mk262)</German>
<Italian>5.56mm 30Rnd Mag (Mk262)</Italian>
<Czech>5.56mm 30náb. Zásobník (Mk262)</Czech>
<Portuguese>Carregador 5.56mm com 30 cartuchos (Mk262)</Portuguese>
<Hungarian>5,56mm 30-lövedékes tár (Mk262)</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_NameShort">
<English>5.56mm Mk262</English>
@ -777,6 +857,8 @@
<German>5,56mm Mk262</German>
<Italian>5.56mm Mk262</Italian>
<Czech>5.56mm Mk262</Czech>
<Portuguese>5.56mm Mk262</Portuguese>
<Hungarian>5,56mm Mk262</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Description">
<English>Caliber: 5.56x45mm NATO (Mk262)&lt;br /&gt;Rounds: 30</English>
@ -787,6 +869,8 @@
<German>Kaliber: 5,56x45mm NATO (Mk262)&lt;br /&gt;Patronen: 30</German>
<Italian>Calibro: 5.56x45 mm NATO (Mk262)&lt;br /&gt;Munizioni: 30</Italian>
<Czech>Ráže: 5.56x45mm NATO (Mk262)&lt;br /&gt;Munice: 30</Czech>
<Portuguese>Calibre: 5.56x45mm NATO (Mk262)&lt;br/&gt;Cartuchos: 30</Portuguese>
<Hungarian>Kaliber: 5,56x45mm NATO (Mk262)&lt;br /&gt;Lövedékek: 30</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Name">
<English>5.56mm 30Rnd Mag (Mk318)</English>
@ -797,6 +881,8 @@
<German>5,56mm 30-Patronen-Magazin (Mk318)</German>
<Italian>5.56mm 30Rnd Mag (Mk318)</Italian>
<Czech>5.56mm 30Rnd Zásobník (Mk318)</Czech>
<Portuguese>Carregador 5.56mm com 30 cartuchos (Mk318)</Portuguese>
<Hungarian>5,56mm 30-lövedékes tár (Mk318)</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_NameShort">
<English>5.56mm Mk318</English>
@ -807,6 +893,8 @@
<German>5,56mm Mk318</German>
<Italian>5.56mm Mk318</Italian>
<Czech>5.56mm Mk318</Czech>
<Portuguese>5.56mm Mk318</Portuguese>
<Hungarian>5,56mm Mk318</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Description">
<English>Caliber: 5.56x45mm NATO (Mk318)&lt;br /&gt;Rounds: 30</English>
@ -817,6 +905,8 @@
<German>Kaliber: 5,56x45mm NATO (Mk318)&lt;br /&gt;Patronen: 30</German>
<Italian>Calibro: 5.56x45 mm NATO (Mk318)&lt;br /&gt;Munizioni: 30</Italian>
<Czech>Ráže: 5.56x45mm NATO (Mk318)&lt;br /&gt;Munice: 30</Czech>
<Portuguese>Calibre: 5.56x45mm NATO (Mk318)&lt;br/&gt;Cartuchos: 30</Portuguese>
<Hungarian>Kaliber: 5,56x45mm NATO (Mk318)&lt;br /&gt;Lövedékek: 30</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Name">
<English>5.56mm 30Rnd Mag (M995 AP)</English>
@ -827,6 +917,8 @@
<German>5,56mm 30-Patronen-Magazin (M995AP)</German>
<Italian>5.56mm 30Rnd Mag (M995 AP) </Italian>
<Czech>5.56mm 30náb. Zásobník (M995 AP)</Czech>
<Portuguese>Carregador 5.56mm com 30 cartuchos (M995 AP)</Portuguese>
<Hungarian>5,56mm 30-lövedékes tár (M995 páncéltörő)</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_NameShort">
<English>5.56mm AP</English>
@ -837,6 +929,8 @@
<German>5,56mm AP</German>
<Italian>5.56mm AP</Italian>
<Czech>5.56mm AP</Czech>
<Portuguese>5.56mm M995 AP</Portuguese>
<Hungarian>5,56mm páncéltörő</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Description">
<English>Caliber: 5.56x45mm NATO (M995 AP)&lt;br /&gt;Rounds: 30</English>
@ -847,6 +941,8 @@
<German>Kaliber: 5,56x45mm NATO (M995 AP)&lt;br /&gt;Patronen: 30</German>
<Italian>Calibro: 5.56x45 mm NATO (M995 AP)&lt;br /&gt;Munizioni: 30</Italian>
<Czech>Ráže: 5.56x45mm NATO (M995 AP)&lt;br /&gt;Munice: 30</Czech>
<Portuguese>Calibre: 5.56x45mm NATO (M995 AP)&lt;br/&gt;Cartuchos: 30</Portuguese>
<Hungarian>Kaliber: 5,56x45mm NATO (M995 páncéltörő)&lt;br /&gt;Lövedékek: 30</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Name">
<English>7.62mm 10Rnd Mag (M118LR)</English>
@ -857,16 +953,20 @@
<German>7,62mm 10-Patronen-Magazin (M118LR)</German>
<Italian>7.62mm 10Rnd Mag (M118LR)</Italian>
<Czech>7.62mm 10náb. Zásobník (M118LR)</Czech>
<Portuguese>Carregador 7.62mm com 10 cartuchos (M118LR)</Portuguese>
<Hungarian>7,62mm 10-lövedékes tár (M118LR)</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_NameShort">
<English>7.62mm M118LR</English>
<Polish>7,62mm M118LR</Polish>
<French>7.62mm M118LR</French>
<Spanish>7.62mm (M118LR)</Spanish>
<Spanish>7.62mm M118LR</Spanish>
<Russian>7,62 мм M118LR</Russian>
<German>7,62mm M118LR</German>
<Italian>7.62mm M118LR</Italian>
<Czech>7.62mm M118LR</Czech>
<Portuguese>7.62mm M118LR</Portuguese>
<Hungarian>7,62mm M118LR</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Description">
<English>Caliber: 7.62x51mm NATO (M118LR)&lt;br /&gt;Rounds: 10</English>
@ -877,6 +977,8 @@
<German>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 7.62x51mm NATO (M118LR)&lt;br /&gt;Munice: 10</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (M118LR)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Name">
<English>7.62mm 20Rnd Mag (M118LR)</English>
@ -887,16 +989,20 @@
<German>7,62mm 20-Patronen-Magazin (M118LR)</German>
<Italian>7.62mm 20Rnd Mag (M118LR)</Italian>
<Czech>7.62mm 20náb. Zásobník (M118LR)</Czech>
<Portuguese>Carregador 7.62mm com 20 cartuchos (M118LR)</Portuguese>
<Hungarian>7,62mm 20-lövedékes tár (M118LR)</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_NameShort">
<English>7.62mm M118LR</English>
<Polish>7,62mm M118LR</Polish>
<French>7.62mm M118LR</French>
<Spanish>7.62mm (M118LR)</Spanish>
<Spanish>7.62mm M118LR</Spanish>
<Russian>7,62 мм M118LR</Russian>
<German>7,62mm M118LR</German>
<Italian>7.62mm M118LR</Italian>
<Czech>7.62mm M118LR</Czech>
<Portuguese>7.62mm M118LR</Portuguese>
<Hungarian>7,62mm M118LR</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Description">
<English>Caliber: 7.62x51mm NATO (M118LR)&lt;br /&gt;Rounds: 20</English>
@ -907,6 +1013,8 @@
<German>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x51mm NATO (M118LR)&lt;br /&gt;Munice: 20</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (M118LR)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (M118LR)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Name">
<English>7.62mm 10Rnd Mag (Mk316 Mod 0)</English>
@ -917,6 +1025,8 @@
<German>7,62mm 10-Patronen-Magazin (Mk316 Mod 0)</German>
<Italian>7.62mm 10Rnd Mag (Mk316 Mod 0)</Italian>
<Czech>7.62mm 10náb. Zásobník (Mk316 Mod 0)</Czech>
<Portuguese>Carregador 7.62mm com 10 cartuchos (Mk316 Mod 0)</Portuguese>
<Hungarian>7,62mm 10-lövedékes tár (Mk316 Mod 0)</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_NameShort">
<English>7.62mm Mk316</English>
@ -927,6 +1037,8 @@
<German>7,62mm Mk316</German>
<Italian>7.62mm Mk316</Italian>
<Czech>7.62mm Mk316</Czech>
<Portuguese>7.62mm Mk316</Portuguese>
<Hungarian>7,62mm Mk316</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Description">
<English>Caliber: 7.62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Rounds: 10</English>
@ -937,6 +1049,8 @@
<German>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 7.62x51 mm NATO (Mk316 Mod 0)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Munice: 10</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (Mk316 Mod 0)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Name">
<English>7.62mm 20Rnd Mag (Mk316 Mod 0)</English>
@ -947,6 +1061,8 @@
<German>7,62mm 20-Patronen-Magazin (Mk316 Mod 0)</German>
<Italian>7.62mm 20Rnd Mag (Mk316 Mod 0)</Italian>
<Czech>7.62mm 20náb. Zásobník (Mk316 Mod 0)</Czech>
<Portuguese>Carregador 7.62mm com 20 cartuchos (Mk316 Mod 0)</Portuguese>
<Hungarian>7,62mm 20-lövedékes tár (Mk316 Mod 0)</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_NameShort">
<English>7.62mm Mk316</English>
@ -957,6 +1073,8 @@
<German>7,62mm Mk316</German>
<Italian>7.62mm Mk316</Italian>
<Czech>7.62mm Mk316</Czech>
<Portuguese>7.62mm Mk316</Portuguese>
<Hungarian>7,62mm Mk316</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Description">
<English>Caliber: 7.62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Rounds: 20</English>
@ -967,6 +1085,8 @@
<German>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x51 mm NATO (Mk316 Mod 0)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Munice: 20</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (Mk316 Mod 0)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk316 Mod 0)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Name">
<English>7.62mm 10Rnd Mag (Mk319 Mod 0)</English>
@ -977,6 +1097,8 @@
<German>7,62mm 10-Patronen-Magazin (Mk319 Mod 0)</German>
<Italian>7.62mm 10Rnd Mag (Mk319 Mod 0)</Italian>
<Czech>7.62mm 10náb. Zásobník (Mk319 Mod 0)</Czech>
<Portuguese>Carregador 7.62mm com 10 cartuchos (Mk319 Mod 0)</Portuguese>
<Hungarian>7,62mm 10-lövedékes tár (Mk319 Mod 0)</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_NameShort">
<English>7.62mm Mk319</English>
@ -987,6 +1109,8 @@
<German>7,62mm Mk319</German>
<Italian>7.62mm Mk319</Italian>
<Czech>7.62mm Mk319</Czech>
<Portuguese>7.62mm Mk319</Portuguese>
<Hungarian>7,62mm Mk319</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Description">
<English>Caliber: 7.62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Rounds: 10</English>
@ -997,6 +1121,8 @@
<German>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Munice: 10</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (Mk319 Mod 0)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Name">
<English>7.62mm 20Rnd Mag (Mk319 Mod 0)</English>
@ -1007,6 +1133,8 @@
<German>7,62mm 20-Patronen-Magazin (Mk319 Mod 0)</German>
<Italian>7.62mm 20Rnd Mag (Mk319 Mod 0)</Italian>
<Czech>7.62mm 20náb. Zásobník (Mk319 Mod 0)</Czech>
<Portuguese>Carregador 7.62mm com 20 cartuchos (Mk319 Mod 0)</Portuguese>
<Hungarian>7,62mm 20-lövedékes tár (Mk319 Mod 0)</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_NameShort">
<English>7.62mm Mk319</English>
@ -1017,6 +1145,8 @@
<German>7,62mm Mk319</German>
<Italian>7.62mm Mk319</Italian>
<Czech>7.62mm Mk319</Czech>
<Portuguese>7.62mm Mk319</Portuguese>
<Hungarian>7,62mm Mk319</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Description">
<English>Caliber: 7.62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Rounds: 20</English>
@ -1027,6 +1157,8 @@
<German>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Munice: 20</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (Mk319 Mod 0)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk319 Mod 0)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M993_AP_Mag_Name">
<English>7.62mm 10Rnd Mag (M993 AP)</English>
@ -1037,6 +1169,8 @@
<German>7,62mm 10-Patronen-Magazin (M993 AP)</German>
<Italian>7.62mm 10Rnd Mag (M993 AP)</Italian>
<Czech>7.62 10náb. Zásobník (M993 AP)</Czech>
<Portuguese>Carregador 7.62mm com 10 cartuchos (M993 AP)</Portuguese>
<Hungarian>7,62mm 10-lövedékes tár (M993 páncéltörő)</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M993_AP_Mag_NameShort">
<English>7.62mm AP</English>
@ -1047,6 +1181,8 @@
<German>7,62mm AP</German>
<Italian>7.62mm AP</Italian>
<Czech>7.62mm AP</Czech>
<Portuguese>7.62mm AP</Portuguese>
<Hungarian>7,62mm páncéltörő</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M993_AP_Mag_Description">
<English>Caliber: 7.62x51mm NATO (M993 AP)&lt;br /&gt;Rounds: 10</English>
@ -1057,6 +1193,8 @@
<German>Kaliber: 7,62x51mm NATO (M993 AP)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 7.62x51 mm NATO (M993 AP)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 7.62x51mm NATO (M993 AP)&lt;br /&gt;Munice: 10</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (M993 AP)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (M993 páncéltörő)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M993_AP_Mag_Name">
<English>7.62mm 20Rnd Mag (M993 AP)</English>
@ -1067,6 +1205,8 @@
<German>7,62mm 20-Patronen-Magazin (M993 AP)</German>
<Italian>7.62mm 20Rnd Mag (M993 AP)</Italian>
<Czech>7.62mm 20náb. Zásobník (M993 AP)</Czech>
<Portuguese>Carregador 7.62mm com 20 cartuchos (M993 AP)</Portuguese>
<Hungarian>7,62mm 20-lövedékes tár (M993 páncéltörő)</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M993_AP_Mag_NameShort">
<English>7.62mm AP</English>
@ -1077,6 +1217,8 @@
<German>7,62mm AP</German>
<Italian>7.62mm AP</Italian>
<Czech>7.62mm AP</Czech>
<Portuguese>7.62mm AP</Portuguese>
<Hungarian>7,62mm páncéltörő</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M993_AP_Mag_Description">
<English>Caliber: 7.62x51mm NATO (M993 AP)&lt;br /&gt;Rounds: 20</English>
@ -1087,6 +1229,8 @@
<Italian>Calibro: 7.62x51 mm NATO (M993 AP)&lt;br /&gt;Munizioni: 20</Italian>
<Spanish>Calibre: 7.62x51 mm NATO (M993 AP)&lt;br /&gt;Balas: 20</Spanish>
<Czech>Ráže: 7.62x51mm NATO (M993 AP)&lt;br /&gt;Munice: 20</Czech>
<Portuguese>Calibre: 7.26x51mm NATO (M993 AP)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (M993 páncéltörő)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Name">
<English>7.62mm 20Rnd Mag (Mk248 Mod 0)</English>
@ -1097,16 +1241,20 @@
<German>7,62mm 20-Patronen-Magazin (Mk248 Mod 0)</German>
<Italian>7.62mm 20Rnd Mag (Mk248 Mod 0)</Italian>
<Czech>7.62mm 20náb. Zásobník (Mk248 Mod 0)</Czech>
<Portuguese>Carregador 7.62mm com 20 cartuchos (Mk248 Mod 0)</Portuguese>
<Hungarian>7,62mm 20-lövedékes tár (Mk248 Mod 0)</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_NameShort">
<English>7.62mm (Mk248 Mod 0)</English>
<Polish>7,62mm (Mk248 Mod 0)</Polish>
<French>7.62mm (Mk248 Mod 0)</French>
<Spanish>7.62mm (Mk248 Mod 0)</Spanish>
<Russian>7,62 мм (Mk248 Mod 0)</Russian>
<German>7,62mm (Mk248 Mod 0)</German>
<Italian>7.62mm (Mk248 Mod 0)</Italian>
<Czech>7.62mm (Mk248 Mod 0)</Czech>
<English>7.62mm Mk248</English>
<Polish>7,62mm Mk248</Polish>
<French>7.62mm Mk248</French>
<Spanish>7.62mm Mk248</Spanish>
<Russian>7,62 мм Mk248</Russian>
<German>7,62mm Mk248</German>
<Italian>7.62mm Mk248</Italian>
<Czech>7.62mm Mk248</Czech>
<Portuguese>7.62mm Mk248</Portuguese>
<Hungarian>7,62mm Mk248</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Description">
<English>Caliber: 7.62x67mm NATO (Mk248 Mod 0)&lt;br /&gt;Rounds: 20</English>
@ -1117,6 +1265,8 @@
<German>Kaliber: 7,62x51mm NATO (Mk248 Mod 0)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x67 mm NATO (Mk248 Mod 0)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 0)&lt;br /&gt;Munice: 20</Czech>
<Portuguese>Calibre: 7.26x67mm NATO (Mk248 Mod 0)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk248 Mod 0)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Name">
<English>7.62mm 20Rnd Mag (Mk248 Mod 1)</English>
@ -1127,16 +1277,20 @@
<German>7,62mm 20-Patronen-Magazin (Mk248 Mod 1)</German>
<Italian>7.62mm 20Rnd Mag (Mk248 Mod 1)</Italian>
<Czech>7.62mm 20náb. Zásobník (Mk248 Mod 1)</Czech>
<Portuguese>Carregador 7.62mm com 20 cartuchos (Mk248 Mod 1)</Portuguese>
<Hungarian>7,62mm 20-lövedékes tár (Mk248 Mod 1)</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_NameShort">
<English>7.62mm (Mk248 Mod 1)</English>
<Polish>7,62mm (Mk248 Mod 1)</Polish>
<French>7.62mm (Mk248 Mod 1)</French>
<Spanish>7.62mm (Mk248 Mod 1)</Spanish>
<Russian>7,62 мм (Mk248 Mod 1)</Russian>
<German>7,62mm (Mk248 Mod 1)</German>
<Italian>7.62mm (Mk248 Mod 1)</Italian>
<Czech>7.62mm (Mk248 Mod 1)</Czech>
<English>7.62mm Mk248</English>
<Polish>7,62mm Mk248</Polish>
<French>7.62mm Mk248</French>
<Spanish>7.62mm Mk248</Spanish>
<Russian>7,62 мм Mk248</Russian>
<German>7,62mm Mk248</German>
<Italian>7.62mm Mk248</Italian>
<Czech>7.62mm Mk248</Czech>
<Portuguese>7.62mm Mk248</Portuguese>
<Hungarian>7,62mm Mk248</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Description">
<English>Caliber: 7.62x67mm NATO (Mk248 Mod 1)&lt;br /&gt;Rounds: 20</English>
@ -1147,6 +1301,8 @@
<German>Kaliber: 7,62x51mm NATO (Mk248 Mod 1)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x67 mm NATO (Mk248 Mod 1)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x67mm NATO (Mk248 Mod 1)&lt;br /&gt;Munice: 20</Czech>
<Portuguese>Calibre: 7.26x67mm NATO (Mk248 Mod 1)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x51mm NATO (Mk248 Mod 1)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Name">
<English>7.62mm 20Rnd Mag (Berger Hybrid OTM)</English>
@ -1157,16 +1313,20 @@
<German>7,62mm 20-Patronen-Magazin (Berger Hybrid OTM)</German>
<Italian>7.62mm 20Rnd Mag (Berger Hybrid OTM)</Italian>
<Czech>7.62mm 20náb. Zásobník (Berger Hybrid OTM)</Czech>
<Portuguese>Carregador 7.62mm com 20 cartuchos (Berger Hybrid OTM)</Portuguese>
<Hungarian>7,62mm 20-lövedékes tár (Berger Hybrid OTM)</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_NameShort">
<English>7.62mm (OTM)</English>
<Polish>7,62mm (OTM)</Polish>
<French>7.62mm (OTM)</French>
<Spanish>7.62mm (OTM)</Spanish>
<Russian>7,62 мм (OTM)</Russian>
<German>7,62mm (OTM)</German>
<Italian>7.62mm (OTM)</Italian>
<Czech>7.62mm (OTM)</Czech>
<English>7.62mm OTM</English>
<Polish>7,62mm OTM</Polish>
<French>7.62mm OTM</French>
<Spanish>7.62mm OTM</Spanish>
<Russian>7,62 мм OTM</Russian>
<German>7,62mm OTM</German>
<Italian>7.62mm OTM</Italian>
<Czech>7.62mm OTM</Czech>
<Portuguese>7.62mm OTM</Portuguese>
<Hungarian>7,62mm OTM</Hungarian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Description">
<English>Caliber: 7.62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Rounds: 20</English>
@ -1177,6 +1337,8 @@
<German>Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Patronen: 20</German>
<Italian>Calibro: 7.62x67 mm NATO (Berger Hybrid OTM)&lt;br /&gt;Munizioni: 20</Italian>
<Czech>Ráže: 7.62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Munice: 20</Czech>
<Portuguese>Calibre: 7.26x67mm NATO (Berger Hybrid OTM)&lt;br/&gt;Cartuchos: 20</Portuguese>
<Hungarian>Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Lövedékek: 20</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Name">
<English>6.5x47mm 30Rnd Mag (HPBT Scenar)</English>
@ -1187,6 +1349,8 @@
<German>6,5x47mm 30-Patronen-Magazin (HPBT Scenar)</German>
<Italian>6.5x47mm 30Rnd Mag (HPBT Scenar)</Italian>
<Czech>6.5x47mm 30náb. Zásobník (HPBT Scenar)</Czech>
<Portuguese>Carregador 6.5x47mm com 30 cartuchos (HPBT Scenar)</Portuguese>
<Hungarian>6,5x47mm 30-lövedékes tár (HPBT Scenar)</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_NameShort">
<English>6.5mm Lapua</English>
@ -1197,6 +1361,8 @@
<German>6,5mm Lapua</German>
<Italian>6.5mm Lapua</Italian>
<Czech>6.5mm Lapua</Czech>
<Portuguese>6.5mm Lapua</Portuguese>
<Hungarian>6,5mm Lapua</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Description">
<English>Caliber: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MXM</English>
@ -1207,6 +1373,8 @@
<German>Kaliber: 6,5x47mm (HPBT Scenar)&lt;br /&gt;Patronen: 30&lt;br /&gt;Eingesetzt von: MXM</German>
<Italian>Calibro: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MXM</Italian>
<Czech>Ráže: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MXM</Czech>
<Portuguese>Calibre: 6.5x47mm (HPBT Scenar)&lt;br/&gt;Cartuchos: 30&lt;br/&gt;Usado em: MXM</Portuguese>
<Hungarian>Kaliber: 6,5x47mm (HPBT Scenar)&lt;br /&gt;Lövedékek: 30&lt;br /&gt;Használható: MXM</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_65_Creedmor_mag_Name">
<English>6.5mm Creedmor 30Rnd Mag</English>
@ -1217,6 +1385,8 @@
<Spanish>Cargador de 30 balas Creedmor de 6.5mm</Spanish>
<French>Ch. 6.5mm Creedmor 30Cps</French>
<Czech>6.5mm Creedmor 30náb. Zásobník</Czech>
<Portuguese>Carregador 6.5mm com 30 cartuchos Creedmor</Portuguese>
<Hungarian>6,5mm Creedmor 30-lövedékes tár</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_65_Creedmor_mag_NameShort">
<English>6.5mm CM</English>
@ -1227,6 +1397,8 @@
<German>6,5mm CM</German>
<Italian>6.5mm CM</Italian>
<Czech>6.5mm CM</Czech>
<Portuguese>6.5mm CM</Portuguese>
<Hungarian>6,5mm CM</Hungarian>
</Key>
<Key ID="STR_ACE_30Rnd_65_Creedmor_mag_Description">
<English>Caliber: 6.5x47mm Creedmor&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MXM</English>
@ -1237,6 +1409,8 @@
<Spanish>Calibre: 6.5mm Creedmor&lt;br /&gt;Balas: 30&lt;br /&gt;Se usa en: MXM</Spanish>
<Russian>Калибр: 6,5x47мм Creedmor&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются c: MXM</Russian>
<Czech>Ráže: 6.5x47mm Creedmor&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MXM</Czech>
<Portuguese>Calibre: 6.5x47mm Creedmor&lt;br/&gt;Cartuchos: 30&lt;br/&gt;Usado em: MXM</Portuguese>
<Hungarian>Kaliber: 6,5x47mm Creedmor&lt;br /&gt;Lövedékek: 30&lt;br /&gt;Használható: MXM</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_Name">
<English>.338 10Rnd Mag (300gr Sierra MatchKing HPBT)</English>
@ -1247,6 +1421,8 @@
<German>.338 10-Patronen-Magazin (300gr Sierra MatchKing HPBT)</German>
<Italian>.338 10Munizioni Mag (300gr Sierra MatchKing HPBT)</Italian>
<Czech>.338 10náb. Zásobník (300gr Sierra MatchKing HPBT)</Czech>
<Portuguese>Carregador .338 (300gr Sierra MatchKing HPBT) com 10 cartuchos </Portuguese>
<Hungarian>.338 10-lövedékes tár (300gr Sierra MatchKing HPBT)</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_NameShort">
<English>.338 HPBT</English>
@ -1255,8 +1431,10 @@
<Polish>.338 HPBT</Polish>
<Russian>.338 экспансивные</Russian>
<German>.338 HPBT</German>
<Italian>.338 (HPBT)</Italian>
<Italian>.338 HPBT</Italian>
<Czech>.338 HPBT</Czech>
<Portuguese>.338 HPBT</Portuguese>
<Hungarian>.338 HPBT</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_Description">
<English>Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Rounds: 10</English>
@ -1267,6 +1445,8 @@
<German>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Munice: 10</Czech>
<Portuguese>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_338_API526_Mag_Name">
<English>.338 10Rnd Mag (API526)</English>
@ -1277,6 +1457,8 @@
<German>.338 10-Patronen-Magazin (API526)</German>
<Italian>.338 10Rnd Mag (API526)</Italian>
<Czech>.338 10náb. Zásobník (API526)</Czech>
<Portuguese>Carregador .338 (API526) com 10 cartuchos </Portuguese>
<Hungarian>.338 10-lövedékes tár (API526)</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_338_API526_Mag_NameShort">
<English>.338 AP</English>
@ -1287,6 +1469,8 @@
<German>.338 AP</German>
<Italian>.338 AP</Italian>
<Czech>.338 AP</Czech>
<Portuguese>.338 AP</Portuguese>
<Hungarian>.338 páncéltörő</Hungarian>
</Key>
<Key ID="STR_ACE_10Rnd_338_API526_Mag_Description">
<English>Caliber: 8.6x70mm (API526)&lt;br /&gt;Rounds: 10</English>
@ -1297,6 +1481,8 @@
<German>Kaliber: 8,6x70mm (API526)&lt;br /&gt;Patronen: 10</German>
<Italian>Calibro: 8.6x70mm (API526)&lt;br /&gt;Munizioni: 10</Italian>
<Czech>Ráže: 8.6x70mm (API526)&lt;br /&gt;Munice: 10</Czech>
<Portuguese>Calibre: 8.6x70mm (API526)&lt;br/&gt;Cartuchos: 10</Portuguese>
<Hungarian>Kaliber: 8,6x70mm (API526)&lt;br /&gt;Lövedékek: 10</Hungarian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_Mag_Name">
<English>12.7x99mm 5Rnd Mag</English>
@ -1307,6 +1493,8 @@
<German>12,7x99mm 5-Patronen-Magazin</German>
<Italian>12.7x99mm 5Rnd Mag</Italian>
<Czech>12.7x99mm 5náb. Zásobník</Czech>
<Portuguese>Carregador 12.7x99mm com 5 cartuchos </Portuguese>
<Hungarian>12,7x99mm 5-lövedékes tár</Hungarian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_Mag_NameShort">
<English>12.7mm</English>
@ -1317,6 +1505,8 @@
<German>12,7mm</German>
<Italian>12.7mm</Italian>
<Czech>12.7mm</Czech>
<Portuguese>12.7mm</Portuguese>
<Hungarian>12,7mm</Hungarian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_Mag_Description">
<English>Caliber: 12.7x99mm&lt;br /&gt;Rounds: 5</English>
@ -1327,6 +1517,8 @@
<German>Kaliber: 12,7x99mm&lt;br /&gt;Patronen: 5</German>
<Italian>Calibro: 12.7x99mm&lt;br /&gt;Munizioni: 5</Italian>
<Czech>Ráže: 12.7x99mm&lt;br /&gt;Munice: 5</Czech>
<Portuguese>Calibre: 12.7x99mm&lt;br/&gt;Cartuchos: 5</Portuguese>
<Hungarian>Kaliber: 12,7x99mm&lt;br /&gt;Lövedékek: 5</Hungarian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_API_Mag_Name">
<English>12.7x99mm API 5Rnd Mag</English>
@ -1337,6 +1529,8 @@
<Russian>Магазин из 5-ти 12,7x99 мм (бронебойно-зажигательные)</Russian>
<German>12,7x99mm 5-Patronen-Magazin (API)</German>
<Czech>12.7x99mm API 5náb. Zásobník</Czech>
<Portuguese>Carregador 12.7x99mm API com 5 cartuchos </Portuguese>
<Hungarian>12,7x99mm 5-lövedékes tár (páncéltörő-gyújtó)</Hungarian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_API_Mag_NameShort">
<English>12.7mm API</English>
@ -1347,6 +1541,8 @@
<Russian>12.7 мм бронебойно-зажигательные</Russian>
<German>12,7mm API</German>
<Czech>12.7mm API</Czech>
<Portuguese>12.7mm API</Portuguese>
<Hungarian>12,7mm páncéltörő-gyújtó</Hungarian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_API_Mag_Description">
<English>Caliber: 12.7x99mm API&lt;br /&gt;Rounds: 5</English>
@ -1357,6 +1553,8 @@
<German>Kaliber:12,7x99mm API&lt;br /&gt;Patronen: 5</German>
<Italian>Calibro: 12.7x99mm API&lt;br /&gt;Munizioni: 5</Italian>
<Czech>Ráže: 12.7x99mm API&lt;br /&gt;Munice: 5</Czech>
<Portuguese>Calibre: 12.7x99mm API&lt;br/&gt;Cartuchos: 5</Portuguese>
<Hungarian>Kaliber: 12,7x99mm API&lt;br /&gt;Lövedékek: 5</Hungarian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Name">
<English>12.7x99mm 5Rnd Mag (AMAX)</English>
@ -1367,6 +1565,8 @@
<German>12,7x99mm 5-Patronen-Magazin (AMAX)</German>
<Italian>12.7x99mm 5Rnd Mag (AMAX)</Italian>
<Czech>12.7x99mm 5náb. Zásobník (AMAX)</Czech>
<Portuguese>Carregador 12.7x99mm (AMAX) com 5 cartuchos </Portuguese>
<Hungarian>12,7x99mm 5-lövedékes tár (AMAX)</Hungarian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_NameShort">
<English>12.7mm</English>
@ -1377,6 +1577,8 @@
<German>12,7mm</German>
<Italian>12.7mm</Italian>
<Czech>12.7mm</Czech>
<Portuguese>12.7mm</Portuguese>
<Hungarian>12,7mm</Hungarian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Description">
<English>Caliber: 12.7x99mm (AMAX)&lt;br /&gt;Rounds: 5</English>
@ -1387,6 +1589,12 @@
<Italian>Calibro: 12.7x99mm (AMAX)&lt;br /&gt;Munizioni: 5</Italian>
<German>Kaliber:12,7x99mm (AMAX)&lt;br /&gt;Patronen: 5</German>
<Czech>Ráže: 12.7x99mm (AMAX)&lt;br /&gt;Munice: 5</Czech>
<Portuguese>Calibre: 12.7x99mm (AMAX)&lt;br/&gt;Cartuchos: 5</Portuguese>
<Hungarian>Kaliber: 12,7x99mm (AMAX)&lt;br /&gt;Lövedékek: 5</Hungarian>
</Key>
<Key ID="STR_ACE_AmmoSupplyCrate_DisplayName">
<English>[ACE] Ammo Supply Crate</English>
<Polish>[ACE] Skrzynka z amunicją</Polish>
</Key>
</Package>
</Project>

View File

@ -161,7 +161,7 @@ class CfgVehicles {
class GVAR(ModuleSurrender): Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Make Unit Surrender";
displayName = "$STR_ACE_Captives_ModuleSurrender_DisplayName"; //Make Unit Surrender
function = QUOTE(DFUNC(moduleSurrender));
scope = 2; //show in editor
scopeCurator = 2; //show in zeus
@ -172,8 +172,8 @@ class CfgVehicles {
functionPriority = 0;
class Arguments {};
class ModuleDescription: ModuleDescription {
description = "Sync a unit to make them surrender.<br/>Source: ace_captives";
description = "$STR_ACE_Captives_ModuleSurrender_Description"; //Sync a unit to make them surrender.<br/>Source: ace_captives
sync[] = {"AnyAI"};
};
};
};
};

View File

@ -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];

View File

@ -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) <OBJECT>
@ -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

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Captives">
<Key ID="STR_ACE_Captives_SetCaptive">
@ -8,7 +8,7 @@
<French>Capturer le prisonnier</French>
<Polish>Aresztuj</Polish>
<Czech>Zajmout Osobu</Czech>
<Italian>Arresta il Prigioniero</Italian>
<Italian>Arresta il prigioniero</Italian>
<Portuguese>Tomar Prisioneiro</Portuguese>
<Hungarian>Foglyul ejtés</Hungarian>
<Russian>Взять в плен</Russian>
@ -20,7 +20,7 @@
<Polish>Wypuść więźnia</Polish>
<French>Libérer le prisonnier</French>
<Czech>Osvobodit Zajatce</Czech>
<Italian>Libera il Prigioniero</Italian>
<Italian>Libera il prigioniero</Italian>
<Portuguese>Libertar Prisioneiro</Portuguese>
<Hungarian>Fogoly szabadon engedése</Hungarian>
<Russian>Освободить пленника</Russian>
@ -71,7 +71,7 @@
<Hungarian>Fogoly berakása</Hungarian>
<Russian>Загрузить пленного</Russian>
<Portuguese>Embarcar Prisioneiro</Portuguese>
<Italian>Carica il prigioniero</Italian>
<Italian>Fai salire il prigioniero</Italian>
</Key>
<Key ID="STR_ACE_Captives_UnloadCaptive">
<English>Unload Captive</English>
@ -83,7 +83,7 @@
<Hungarian>Fogoly kivevése</Hungarian>
<Russian>Выгрузить пленного</Russian>
<Portuguese>Desembarcar Prisioneiro</Portuguese>
<Italian>Scarica il prigioniero</Italian>
<Italian>Fai scendere il prigioniero</Italian>
</Key>
<Key ID="STR_ACE_Captives_CableTie">
<English>Cable Tie</English>
@ -105,7 +105,7 @@
<French>Les Serflex permettent de menotter les prisonniers.</French>
<Czech>Stahovací pásky vám umožní zadržet vězně.</Czech>
<Portuguese>A algema plástica permite que você contenha prisioneiros.</Portuguese>
<Italian>Fascietta che ti consente di arrestare i prigionieri.</Italian>
<Italian>Fascetta per arrestare i prigionieri</Italian>
<Hungarian>Gyorskötöző, emberek foglyulejtéséhez használható.</Hungarian>
<Russian>Кабельные стяжки позволяют связывать пленников.</Russian>
</Key>
@ -119,7 +119,7 @@
<Polish>Ekwipunek rewidowanej osoby</Polish>
<Russian>Инвентарь обысканного человека</Russian>
<Portuguese>Inventário da pessoa revistada</Portuguese>
<Italian>Inventario delle persone perquisite</Italian>
<Italian>Inventario della persona perquisita</Italian>
</Key>
<Key ID="STR_ACE_Captives_FriskPerson">
<English>Frisk person</English>
@ -143,7 +143,7 @@
<Polish>Poddaj się</Polish>
<Russian>Сдаться</Russian>
<Hungarian>Megadás</Hungarian>
<Italian>Arreso</Italian>
<Italian>Arrenditi</Italian>
</Key>
<Key ID="STR_ACE_Captives_StopSurrendering">
<English>Stop Surrendering</English>
@ -155,7 +155,7 @@
<Polish>Podejmij walkę ponownie</Polish>
<Russian>Прекратить сдачу в плен</Russian>
<Hungarian>Megadás abbahagyása</Hungarian>
<Italian>Annulla la resa</Italian>
<Italian>Smetti di arrenderti</Italian>
</Key>
<Key ID="STR_ACE_Captives_Zeus_OnlyAlive">
<English>Only use on alive units</English>
@ -167,6 +167,7 @@
<Russian>Применимо только к живым юнитам</Russian>
<Hungarian>Csak élő egységeken használni</Hungarian>
<Italian>Si può fare solo su persone vive</Italian>
<Portuguese>Usar somente em unidades vivas</Portuguese>
</Key>
<Key ID="STR_ACE_Captives_Zeus_OnlyInfantry">
<English>Only use on dismounted inf</English>
@ -178,6 +179,7 @@
<Russian>Применимо только к пехоте вне техники</Russian>
<Hungarian>Csak járműben kívül lévő egységeken használni</Hungarian>
<Italian>Si può usare solo su fanteria a piedi</Italian>
<Portuguese>Usar somente em infantaria desmontada</Portuguese>
</Key>
<Key ID="STR_ACE_Captives_Zeus_NothingSelected">
<English>Nothing under mouse</English>
@ -189,7 +191,15 @@
<Polish>Nie ma nic pod kursorem</Polish>
<Russian>Ничего не выделено</Russian>
<Hungarian>Semmi sincs az egér alatt</Hungarian>
<Italian>Niente selezionato</Italian>
<Italian>Nessuna selezione</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_DisplayName">
<English>Make Unit Surrender</English>
<Polish>Poddaj się!</Polish>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
<English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English>
<Polish>Zsynchronizuj z jednostką aby sprawić by się poddała&lt;br /&gt;Źródło: ace_captives</Polish>
</Key>
</Package>
</Project>

View File

@ -25,72 +25,72 @@ class CfgVehicles {
// += needs a non inherited entry in that class, otherwise it simply overwrites
//#include <DefaultItems.hpp>
class Module_F;
class ACE_ModuleCheckPBOs: Module_F {
class Logic;
class Module_F: Logic {
class ModuleDescription {};
};
class ACE_ModuleCheckPBOs: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Check PBOs";
displayName = "$STR_ACE_Common_CheckPBO_DisplayName";
function = QFUNC(moduleCheckPBOs);
scope = 2;
isGlobal = 1;
icon = QUOTE(PATHTOF(UI\Icon_Module_CheckPBO_ca.paa));
class Arguments {
class Action {
displayName = "Action";
description = "What to do with people who do not have the right PBOs?";
displayName = "$STR_ACE_Common_CheckPBO_Action_DisplayName";
description = "$STR_ACE_Common_CheckPBO_Action_Description";
class values {
class WarnOnce {
default = 1;
name = "Warn once";
name = "$STR_ACE_Common_CheckPBO_Action_WarnOnce";
value = 0;
};
class Warn {
name = "Warn (permanent)";
name = "$STR_ACE_Common_CheckPBO_Action_WarnPerm";
value = 1;
};
class Kick {
name = "Kick";
name = "$STR_ACE_Common_CheckPBO_Action_Kick";
value = 2;
};
};
};
class CheckAll {
displayName = "Check all addons";
description = "Check all addons instead of only those of ACE?";
displayName = "$STR_ACE_Common_CheckPBO_CheckAll_DisplayName";
description = "$STR_ACE_Common_CheckPBO_CheckAll_Description";
typeName = "BOOL";
class values {
class WarnOnce {
default = 1;
name = "No";
value = 0;
};
class Warn {
name = "Yes";
value = 1;
};
};
defaultValue = 0;
};
class Whitelist {
displayName = "Whitelist";
description = "What addons are allowed regardless?";
displayName = "$STR_ACE_Common_CheckPBO_Whitelist_DisplayName";
description = "$STR_ACE_Common_CheckPBO_Whitelist_Description";
typeName = "STRING";
class values {
default = "[]";
};
};
};
class ModuleDescription: ModuleDescription {
description = "$STR_ACE_Common_CheckPBO_Description";
};
};
class ACE_ModuleLSDVehicles: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "LSD Vehicles";
displayName = "$STR_ACE_Common_LSDVehicles_DisplayName";
function = "ACE_Common_fnc_moduleLSDVehicles";
scope = 2;
icon = QUOTE(PATHTOF(UI\Icon_Module_LSD_ca.paa));
isGlobal = 1;
class Arguments {
};
class ModuleDescription: ModuleDescription {
description = "$STR_ACE_Common_LSDVehicles_Description";
sync[] = {"AnyVehicle"};
};
};
class Box_NATO_Support_F;

View File

@ -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); };
@ -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);
/***************************************************************/
/***************************************************************/
@ -250,14 +249,3 @@ if(isMultiplayer && { time > 0 || isNull player } ) then {
};
}, 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");

View File

@ -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);

View File

@ -101,7 +101,7 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_Common_SettingFeedbackIconsName";
description = "$STR_ACE_Common_SettingFeedbackIconsDesc";
values[] = {"Hide", "Top right, downwards", "Top right, to the left", "Top left, downwards", "Top left, to the right"};
values[] = {"$STR_ACE_Common_Hide", "$STR_ACE_Common_TopRightDown", "$STR_ACE_Common_TopRightLeft", "$STR_ACE_Common_TopLeftDown", "$STR_ACE_Common_TopLeftRight"};
};
class GVAR(SettingProgressBarLocation) {
value = 0;
@ -110,7 +110,7 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_Common_SettingProgressbarLocationName";
description = "$STR_ACE_Common_SettingProgressbarLocationDesc";
values[] = {"Top", "Bottom"};
values[] = {"$STR_ACE_Common_Top", "$STR_ACE_Common_Bottom"};
};
class GVAR(displayTextColor) {
value[] = {0,0,0,0.1};

View File

@ -0,0 +1,88 @@
/*
* 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);
};
} else {
// Print the current extension version
diag_log text format ["[ACE] Extension version: %1: %2", _x, (_x callExtension "version")];
};
} 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;
};
};

View File

@ -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];

View File

@ -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;

View File

@ -13,6 +13,8 @@
*/
#include "script_component.hpp"
private ["_parseConfigForSettings"];
GVAR(settings) = [];
_parseConfigForSettings = {

View File

@ -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:<br/><br/>";
_error = format ["ACE version mismatch: %1: ", profileName];
if (_missingAddon) then {
_text = _text + "Detected missing addon on client<br/>";
_error = _error + "Missing file(s); ";
};
if (_missingAddonServer) then {
_text = _text + "Detected missing addon on server<br/>";
_error = _error + "Additional file(s); ";
};
if (_oldVersionClient) then {
_text = _text + "Detected old client version<br/>";
_error = _error + "Older version; ";
};
if (_oldVersionServer) then {
_text = _text + "Detected old server version<br/>";
_error = _error + "Newer version; ";
};
//[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
diag_log text _error;
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _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:<br/><br/>";
_error = format ["ACE version mismatch: %1: ", profileName];
if (_missingAddon) then {
_text = _text + "Detected missing addon on client<br/>";
_error = _error + "Missing file(s); ";
};
if (_missingAddonServer) then {
_text = _text + "Detected missing addon on server<br/>";
_error = _error + "Additional file(s); ";
};
if (_oldVersionClient) then {
_text = _text + "Detected old client version<br/>";
_error = _error + "Older version; ";
};
if (_oldVersionServer) then {
_text = _text + "Detected old server version<br/>";
_error = _error + "Newer version; ";
};
//[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
diag_log text _error;
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _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);
};

View File

@ -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;

View File

@ -14,6 +14,8 @@
EXPLODE_1_PVT(_this,_optionEntry);
private ["_fnc_getValueWithType", "_value","_name", "_typeName", "_settingData"];
_fnc_getValueWithType = {
EXPLODE_2_PVT(_this,_optionEntry,_typeName);

View File

@ -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;
};

View File

@ -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))

View File

@ -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];
};

View File

@ -275,7 +275,7 @@
<French>Désactiver menu commande</French>
<Russian>Выключить командное меню</Russian>
<Hungarian>Parancsnoki menü kikapcsolása</Hungarian>
<Italian>Disabilita Menù di comando</Italian>
<Italian>Disabilita menù di comando</Italian>
<Portuguese>Desabilitar menu de comando</Portuguese>
</Key>
<Key ID="STR_ACE_Common_Unknown">
@ -308,11 +308,11 @@
<Spanish>Aceptar peticiones</Spanish>
<Polish>Akceptuj prośby</Polish>
<Czech>Přijmout žádost</Czech>
<Italian>Accetta Richieste</Italian>
<French>Accepter requête</French>
<Russian>Принять запросы</Russian>
<Hungarian>Kérések elfogadása</Hungarian>
<Portuguese>Aceitar Pedido</Portuguese>
<Italian>Accetta la richiesta</Italian>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
<English>Decline Requests</English>
@ -320,11 +320,11 @@
<Spanish>Rechazar peticiones</Spanish>
<Polish>Ignoruj prośby</Polish>
<Czech>Zamítnout žádost</Czech>
<Italian>Rifiuta Richieste</Italian>
<Russian>Отклонить запросы</Russian>
<French>Rejeter requête</French>
<Hungarian>Kérések elutasítása</Hungarian>
<Portuguese>Rejeitar pedido</Portuguese>
<Italian>Rifiuta la richiesta</Italian>
</Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP">
<English>Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
@ -402,7 +402,7 @@
<English>Hint Background color</English>
<German>Hintergrundfarbe der Hinweise</German>
<Spanish>Color de fondo de las notificaciones</Spanish>
<Italian>Colore di sfondo dei Suggerimenti</Italian>
<Italian>Colore di sfondo dei suggerimenti</Italian>
<Russian>Цвет фона всплывающих подсказок</Russian>
<Polish>Kolor tła powiadomień</Polish>
<French>Notification: couleur de l'arrière plan</French>
@ -414,7 +414,7 @@
<English>The color of the background from the ACE hints.</English>
<German>Die Hintergrundfarbe der ACE-Hinweise.</German>
<Spanish>El color de fondo de las notificaciones del ACE</Spanish>
<Italian>Il colore di sfondo dei suggerimenti dell'ACE.</Italian>
<Italian>Il colore di sfondo dei suggerimenti di ACE.</Italian>
<Russian>Цвет фона всплывающих подсказок АСЕ.</Russian>
<Polish>Kolor tła dla powiadomień ACE</Polish>
<French>Notification ACE: couleur de l'arrière plan</French>
@ -426,7 +426,7 @@
<English>Hint text font color</English>
<German>Textfarbe der Hinweise</German>
<Spanish>Color del texto de las notificaciones</Spanish>
<Italian>Il colore del Testo dei Suggerimenti</Italian>
<Italian>Il colore del testo dei suggerimenti</Italian>
<Russian>Цвет шрифта всплывающих подсказок</Russian>
<Polish>Kolor tekstu powiadomień</Polish>
<French>Notification: couleur du texte</French>
@ -438,7 +438,7 @@
<English>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.</English>
<German>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. </German>
<Spanish>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.</Spanish>
<Italian>Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se il colore del testo non è specificato.</Italian>
<Italian>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.</Italian>
<Russian>Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок.</Russian>
<Polish>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.</Polish>
<French>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</French>
@ -470,5 +470,57 @@
<French>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.</French>
<Portuguese>A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa.</Portuguese>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_DisplayName">
<English>Check PBOs</English>
<Polish>Sprawdzaj PBO</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Description">
<English></English>
<Polish>Sprawdzaj spójność addonów z serwerem</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
<English>Action</English>
<Polish>Akcja</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Description">
<English>What to do with people who do not have the right PBOs?</English>
<Polish>Co zrobić z graczami, którzy nie mają właściwych PBO?</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce">
<English>Warn once</English>
<Polish>Ostrzeż raz</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm">
<English>Warn (permanent)</English>
<Polish>Ostrzeżenie (permanentne)</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Kick">
<English>Kick</English>
<Polish>Kick</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_DisplayName">
<English>Check all addons</English>
<Polish>Sprawdź wsz. addony</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_Description">
<English>Check all addons instead of only those of ACE?</English>
<Polish>Sprawdzaj wszystkie addony czy tylko te z ACE?</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName">
<English>Whitelist</English>
<Polish>Biała lista</Polish>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_Description">
<English>What addons are allowed regardless?</English>
<Polish>Jakie addony są dozwolone?</Polish>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_DisplayName">
<English>LSD Vehicles</English>
<Polish>Pojazdy LSD</Polish>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_Description">
<English>Adds LSD effect to synchronized vehicle</English>
<Polish>Dodaje efekt LSD pod zsynchronizowany pojazd</Polish>
</Key>
</Package>
</Project>

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -13,4 +13,3 @@
#define DISARM_CONTAINER "GroundWeaponHolder"
#define DUMMY_ITEM "ACE_DebugPotato"
#define UNIQUE_MAGAZINES ["ACE_key_customKeyMagazine"]

View File

@ -11,6 +11,7 @@
<Italian>Apri l'inventario</Italian>
<French>Ouvrir l'inventaire</French>
<Hungarian>Felszerelés megtekintése</Hungarian>
<Portuguese>Abrir inventário</Portuguese>
</Key>
</Package>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Disposable">
<Key ID="STR_ACE_Disposable_UsedTube">
@ -10,7 +10,7 @@
<Spanish>Lanzador utilizado</Spanish>
<Hungarian>Elhasznált kilövőcső</Hungarian>
<Russian>Отстрелянная труба</Russian>
<Italian>Tubo utilizzato</Italian>
<Italian>Tubo usato</Italian>
<Portuguese>Tubo utilizado</Portuguese>
</Key>
<Key ID="STR_ACE_Disposable_UsedTubeDescription">
@ -22,7 +22,7 @@
<Spanish>Lanzador desechable utilizado</Spanish>
<Hungarian>Elhasznált eldobható rakétavető</Hungarian>
<Russian>Отстрелянная одноразовая пусковая установка</Russian>
<Italian>Lanciarazzi monouso utilizzato</Italian>
<Italian>Lanciarazzi monouso già utilizzato</Italian>
<Portuguese>Lança foguetes descartável utilizado</Portuguese>
</Key>
<Key ID="STR_ACE_Disposable_PreloadedMissileDummy">
@ -34,8 +34,8 @@
<Spanish>Precargado misil inerte</Spanish>
<Hungarian>Előtöltött műrakéta</Hungarian>
<Russian>Предзаряженная ракетная болванка</Russian>
<Italian>Missile stupido precaricato</Italian>
<Portuguese>Míssel dummy pré-carregado</Portuguese>
<Italian>Missile inerte precaricato</Italian>
<Portuguese>Míssel inerte pré-carregado</Portuguese>
</Key>
</Package>
</Project>

View File

@ -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;

View File

@ -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;

View File

@ -31,8 +31,8 @@
<Spanish>Objeto demasiado pesado</Spanish>
<Polish>Przedmiot jest zbyt ciężki</Polish>
<French>Objet trop lourd</French>
<Portuguese>Não é possível carregar o item devido a seu peso</Portuguese>
<Italian>Non è possibile trascinare l'oggetto a causa del suo peso</Italian>
<Portuguese>Objeto muito pesado</Portuguese>
<Italian>L'oggetto pesa troppo</Italian>
<Russian>Предмет слишком тяжёлый</Russian>
<Czech>Moc težké</Czech>
<Hungarian>Az objektum túl nehéz</Hungarian>
@ -45,8 +45,8 @@
<French>Porter</French>
<Czech>Nést</Czech>
<Portuguese>Carregar</Portuguese>
<Italian>Trascina</Italian>
<Hungarian>Felvevés</Hungarian>
<Italian>Trasporta</Italian>
<Russian>Нести</Russian>
</Key>
</Package>

View File

@ -1,44 +1,30 @@
class Module_F;
class Logic;
class Module_F: Logic {
class ModuleDescription {};
};
class ACE_ModuleExplosive: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Explosive System";
displayName = "$STR_ACE_Explosive_Module_DisplayName";
function = QUOTE(FUNC(module));
scope = 2;
isGlobal = 1;
icon = PATHTOF(UI\Icon_Module_Explosives_ca.paa);
class Arguments {
class RequireSpecialist {
displayName = "Require specialists?";
description = "Require explosive specialists to disable explosives? Default: No";
displayName = "$STR_ACE_Explosive_RequireSpecialist_DisplayName";
description = "$STR_ACE_Explosive_RequireSpecialist_Description";
typeName = "BOOL";
class values {
class Yes {
name = "Yes";
value = 1;
};
class No {
default = 1;
name = "No";
value = 0;
};
};
defaultValue = 0;
};
class PunishNonSpecialists {
displayName = "Punish non-specialists?";
description = "Increase the time it takes to complete actions for non-specialists? Default: Yes";
displayName = "$STR_ACE_Explosive_PunishNonSpecialists_DisplayName";
description = "$STR_ACE_Explosive_PunishNonSpecialists_Description";
typeName = "BOOL";
class values {
class Yes {
default = 1;
name = "Yes";
value = 1;
};
class No {
name = "No";
value = 0;
};
};
defaultValue = 1;
};
};
};
class ModuleDescription: ModuleDescription {
description = "$STR_ACE_Explosive_Module_Description";
};
};

View File

@ -368,7 +368,7 @@
<Polish>Wybierz zapalnik</Polish>
<French>Sélectionner une mise à feu</French>
<Czech>Zvolit Detonátor</Czech>
<Italian>Seleziona un Attivatore</Italian>
<Italian>Seleziona un attivatore</Italian>
<Hungarian>Gyújtóeszköz kiválasztása</Hungarian>
<Portuguese>Selecionar um Gatilho</Portuguese>
<Russian>Выберите детонатор</Russian>
@ -392,7 +392,7 @@
<German>Druckplatte</German>
<French>Plaque de pression</French>
<Czech>Nášlapná nástraha</Czech>
<Italian>Piastra a Pressione</Italian>
<Italian>Piastra a pressione</Italian>
<Hungarian>Nyomólap</Hungarian>
<Portuguese>Placa de pressão</Portuguese>
<Russian>Нажимная плита</Russian>
@ -404,7 +404,7 @@
<German>Stolperdraht</German>
<French>Fil de détente</French>
<Czech>Nástražný drát</Czech>
<Italian>Filo a Inciampo</Italian>
<Italian>Filo a inciampo</Italian>
<Hungarian>Botlódrót</Hungarian>
<Portuguese>Linha de tração</Portuguese>
<Russian>Растяжка</Russian>
@ -440,7 +440,7 @@
<German>Infrarotsensor (Seitenangriff)</German>
<French>Capteur IR (de flanc)</French>
<Czech>IR Značkovač (Výbuch stranou)</Czech>
<Italian>Sensore IR (Attacco laterale)</Italian>
<Italian>Sensore IR (attacco laterale)</Italian>
<Hungarian>Infravörös szenzor (Side Attack)</Hungarian>
<Portuguese>Sensor infravermelho (ataque lateral)</Portuguese>
<Russian>ИК сенсор (детонация вбок)</Russian>
@ -452,7 +452,7 @@
<German>Magnetfeldsensor (Bodenangriff)</German>
<French>Capteur magnétique (par le bas)</French>
<Czech>Magnetický Senzor (Výbuch ze spoda)</Czech>
<Italian>Sensore Magnetico di Prossimità (Attacco inferiore)</Italian>
<Italian>Sensore Magnetico di Prossimità (attacco inferiore)</Italian>
<Hungarian>Mágneses mező érzékelő (Bottom Attack)</Hungarian>
<Portuguese>Influência magnética (ataque inferior)</Portuguese>
<Russian>Магнитный сенсор (детонация вверх)</Russian>
@ -462,7 +462,7 @@
<German>Keine Sprengladungen auf diesem Auslöser.</German>
<Spanish>Ningún explosivo en el detonador.</Spanish>
<French>Pas d'explosif à mettre à feu.</French>
<Italian>Nessun esplosivo sul sensore.</Italian>
<Italian>Nessun esplosivo</Italian>
<Czech>Žádná výbušnina k odpálení.</Czech>
<Hungarian>Nincs robbanóanyag a gyújtóeszközhöz kötve.</Hungarian>
<Polish>Brak ładunków na zapalnik.</Polish>
@ -491,7 +491,7 @@
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
<Portuguese>Usado para detonar remotamente o explosivo quando solto.</Portuguese>
<Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian>
<Italian>Usato per attivare esplosivi al momento del rilascio</Italian>
<Italian>Usato per attivare a distanza esplosivi al momento del rilascio</Italian>
</Key>
<Key ID="STR_ACE_Explosives_Pickup">
<English>Pick up</English>
@ -505,5 +505,29 @@
<Italian>Raccogli</Italian>
<Portuguese>Pegar</Portuguese>
</Key>
<Key ID="STR_ACE_Explosive_Module_DisplayName">
<English>Explosive System</English>
<Polish>System ładunków wybuchowych</Polish>
</Key>
<Key ID="STR_ACE_Explosive_RequireSpecialist_DisplayName">
<English>Require specialists?</English>
<Polish>Wymagaj specjalistów?</Polish>
</Key>
<Key ID="STR_ACE_Explosive_RequireSpecialist_Description">
<English>Require explosive specialists to disable explosives? Default: No</English>
<Polish>Wymagać saperów do rozbrajania ładunków wybuchowych? Domyślnie: Nie</Polish>
</Key>
<Key ID="STR_ACE_Explosive_PunishNonSpecialists_DisplayName">
<English>Punish non-specialists?</English>
<Polish>Karaj nie-specjalistów?</Polish>
</Key>
<Key ID="STR_ACE_Explosive_PunishNonSpecialists_Description">
<English>Increase the time it takes to complete actions for non-specialists? Default: Yes</English>
<Polish>Zwiększyć ilość wymaganego czasu do ukończenia akcji dla nie-specjalistów? Domyślnie: Tak</Polish>
</Key>
<Key ID="STR_ACE_Explosive_Module_Description">
<English></English>
<Polish>Moduł ten pozwala dostosować opcje związane z ładunkami wybuchowymi, ich podkładaniem oraz rozbrajaniem.</Polish>
</Key>
</Package>
</Project>

View File

@ -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 {

View File

@ -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;

View File

@ -68,7 +68,7 @@
<Italian>Soppressore di fiamma (.338)</Italian>
<Portuguese>Supressor de Clarão (.338)</Portuguese>
<Polish>Tłumik płomienia (.338)</Polish>
<Czech>Tlumič záblesku (.338)</Czech>
<Czech>Tlumič plamene (.338)</Czech>
<French>Cache-flamme (.338)</French>
<Russian>Пламегаситель (.338)</Russian>
<Spanish>Bocacha (.338)</Spanish>
@ -80,7 +80,7 @@
<Italian>Soppressore di fiamma (9.3mm)</Italian>
<Portuguese>Supressor de Clarão (9,3mm)</Portuguese>
<Polish>Tłumik płomienia (9,3 mm)</Polish>
<Czech>Tlumič záblesku (9,3 mm)</Czech>
<Czech>Tlumič plamene (9,3 mm)</Czech>
<French>Cache-flamme (9,3 mm)</French>
<Russian>Пламегаситель (9,3 мм)</Russian>
<Spanish>Bocacha (9,3 mm)</Spanish>

View File

@ -10,6 +10,8 @@ class CfgAmmo {
//};
class Bo_GBU12_LGB;
class ACE_GBU12 : Bo_GBU12_LGB {
GVAR(enabled) = 1;
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
GVAR(metal) = 140000;
GVAR(charge) = 87000;
@ -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.
@ -46,6 +50,8 @@ class CfgAmmo {
class RocketBase;
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;
@ -66,6 +72,8 @@ 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;
@ -75,6 +83,8 @@ class CfgAmmo {
class G_40mm_HE: GrenadeBase {
// Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M441
GVAR(enabled) = 1;
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
GVAR(metal) = 200;
GVAR(charge) = 32;
@ -83,6 +93,8 @@ class CfgAmmo {
};
class G_40mm_HEDP: G_40mm_HE {
// Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M433
GVAR(enabled) = 1;
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
GVAR(metal) = 200;
GVAR(charge) = 45;
@ -107,6 +119,8 @@ class CfgAmmo {
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;
@ -115,6 +129,8 @@ class CfgAmmo {
};
class Sh_82mm_AMOS : Sh_155mm_AMOS {
// Source: http://www.arsenal-bg.com/defense_police/mortar_bombs_82mm.htm
GVAR(enabled) = 1;
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
GVAR(metal) = 3200;
GVAR(charge) = 420;
@ -122,6 +138,8 @@ class CfgAmmo {
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;
@ -129,6 +147,8 @@ class CfgAmmo {
GVAR(gurney_k) = 1/2;
};
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;
@ -136,6 +156,8 @@ class CfgAmmo {
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;
@ -143,6 +165,8 @@ class CfgAmmo {
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;
@ -150,6 +174,8 @@ class CfgAmmo {
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;
@ -175,6 +201,8 @@ class CfgAmmo {
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;
@ -183,6 +211,8 @@ class CfgAmmo {
};
class M_Hellfire_AT: MissileBase {
// Source: http://www.designation-systems.net/dusrm/m-114.html
GVAR(enabled) = 1;
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
GVAR(metal) = 8000;
GVAR(charge) = 2400;

View File

@ -4,11 +4,8 @@
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", "_index", "_hitData", "_fragTypes", "_fragType", "_foundObjects"];
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;

View File

@ -1,6 +1,6 @@
#include "script_component.hpp"
private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall", "_spallTrack", "_spallTrackID"];
private ["_enabled", "_gun", "_type", "_round", "_doFragTrack", "_doSpall", "_spallTrack", "_spallTrackID"];
if (!GVAR(enabled)) exitWith {};
@ -8,10 +8,14 @@ _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;

View File

@ -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", "_endTime"];
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;

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Frag">
<Key ID="STR_DN_ACE_FRAG">
@ -11,7 +11,7 @@
<French>Désactive la fragmentation</French>
<Hungarian>Repeszek letiltása</Hungarian>
<Italian>Disattiva la frammentazione</Italian>
<Portuguese>Disabilitar Fragmentação</Portuguese>
<Portuguese>Desabilitar Fragmentação</Portuguese>
</Key>
</Package>
</Project>

View File

@ -98,21 +98,21 @@ class CfgVehicles {
class ACE_ModuleHearing: Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "Hearing";
displayName = "$STR_ACE_Hearing_Module_DisplayName";
function = QFUNC(moduleHearing);
scope = 2;
isGlobal = 1;
icon = PATHTOF(UI\Icon_Module_Hearing_ca.paa);
class Arguments {
class EnableCombatDeafness {
displayName = "Enable combat deafness?";
description = "Enable combat deafness?";
displayName = "$STR_ACE_Hearing_CombatDeafness_DisplayName";
description = "$STR_ACE_Hearing_CombatDeafness_Description";
typeName = "BOOL";
class values {
class Yes { name = "Yes"; value = 1; default = 1; };
class No { name = "No"; value = 0; };
};
defaultValue = 1;
};
};
class ModuleDescription {
description = "$STR_ACE_Hearing_Module_Description";
};
};
};

View File

@ -106,7 +106,24 @@
<Czech>Vypnout pískání v uších</Czech>
<Polish>Wyłącz dzwonienie w uszach</Polish>
<Hungarian>Fülcsengés letiltása</Hungarian>
<Italian>Disabilita il ronzio</Italian>
<Italian>Disabilita i fischi nelle orecchie</Italian>
<Portuguese>Desabilitar zumbido de ouvidos</Portuguese>
</Key>
<Key ID="STR_ACE_Hearing_Module_DisplayName">
<English>Hearing</English>
<Polish>Słuch</Polish>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_DisplayName">
<English>Enable combat deafness?</English>
<Polish>Wł. głuchotę bojową</Polish>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_Description">
<English>Enable combat deafness?</English>
<Polish>Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów</Polish>
</Key>
<Key ID="STR_ACE_Hearing_Module_Description">
<English></English>
<Polish>Głuchota bojowa pojawia się w momentach, kiedy stoimy w pobliżu broni wielkokalibrowej bez ochrony słuchu, lub np. podczas ostrzału artyleryjskiego. Moduł ten pozwala na włączenie lub wyłączenie tego efektu.</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,47 +1,8 @@
class GVAR(cursorMenu) {
idd = 91919;
movingEnable = false;
access = 0;
movingEnable = 0;
enableSimulation = 1;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(dlgCursorMenu)),_this select 0)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),true)]);
onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),false)]);
objects[] = {};
/*class controlsBackground {
class Background {
idc = 91920;
moving = 0;
font = "TahomaB";
text = "";
sizeEx = 0;
lineSpacing = 0;
access = 0;
type = 0;
style = 0;
size = 1;
colorBackground[] = {0, 0, 0, 0.5};
colorText[] = {0, 0, 0, 0};
x = "safezoneX";
y = "safezoneY";
w = "safezoneW";
h = "safezoneH";
};
};*/
class controls {
class Canvas {
idc = 91921;
moving = 0;
font = "TahomaB";
text = "";
sizeEx = 0;
lineSpacing = 0;
access = 0;
type = 0;
style = 0;
size = 1;
colorBackground[] = {0, 0, 0, 0};
colorText[] = {0, 0, 0, 0};
x = "safezoneX";
y = "safezoneY";
w = "safezoneW";
h = "safezoneH";
};
};
};

View File

@ -57,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

View File

@ -25,6 +25,21 @@ PREP(renderSelector);
PREP(setupTextColors);
PREP(splitPath);
// Event handlers for all interact menu controls
DFUNC(handleMouseMovement) = {
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];
};
};
DFUNC(handleMouseButtonDown) = {
if !(GVAR(actionOnKeyRelease)) then {
[GVAR(openedMenuType),true] call FUNC(keyUp);
};
};
GVAR(keyDown) = false;
GVAR(keyDownSelfAction) = false;
GVAR(keyDownTime) = 0;
@ -51,6 +66,7 @@ GVAR(expandedTime) = diag_tickTime;
GVAR(iconCtrls) = [];
GVAR(iconCount) = 0;
GVAR(collectedActionPoints) = [];
GVAR(foundActions) = [];
GVAR(lastTimeSearchedActions) = -1000;

View File

@ -16,7 +16,7 @@ EXPLODE_2_PVT(_this,_newUnit,_oldUnit);
// add to new unit
private "_ehid";
_ehid = [_newUnit, "DefaultAction", {GVAR(openedMenuType) >= 0}, {
if !(GVAR(actionOnKeyRelease)) then {
if (!GVAR(actionOnKeyRelease) && GVAR(actionSelected)) then {
[GVAR(openedMenuType),true] call FUNC(keyUp);
};
}] call EFUNC(common,addActionEventHandler);

View File

@ -37,27 +37,30 @@ GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
{(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}} ||
{(_menuType == 0) && GVAR(AlwaysUseCursorInteraction)};
// Delete existing controls in case there's any left
GVAR(iconCount) = 0;
for "_i" from 0 to (count GVAR(iconCtrls))-1 do {
ctrlDelete (GVAR(iconCtrls) select _i);
GVAR(ParsedTextCached) set [_i, ""];
};
GVAR(iconCtrls) resize GVAR(iconCount);
if (GVAR(useCursorMenu)) then {
createDialog QGVAR(cursorMenu);
(findDisplay 46) createDisplay QGVAR(cursorMenu); //"RscCinemaBorder";//
(finddisplay 91919) displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}];
(finddisplay 91919) displayAddEventHandler ["KeyDown", {[_this,'keydown'] call CBA_events_fnc_keyHandler}];
// The dialog sets:
// uiNamespace getVariable QGVAR(dlgCursorMenu);
// uiNamespace getVariable QGVAR(cursorMenuOpened);
ctrlEnable [91921, true];
GVAR(cursorPos) = [0.5,0.5,0];
((finddisplay 91919) displayctrl 91921) ctrlAddEventHandler ["MouseMoving", {
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)) then {
[GVAR(openedMenuType),true] call FUNC(keyUp);
};
}];
_ctrl = (findDisplay 91919) ctrlCreate ["RscStructuredText", 9922];
_ctrl ctrlSetPosition [safeZoneX, safeZoneY, safeZoneW, safeZoneH];
_ctrl ctrlCommit 0;
// handles Mouse moving and LMB in cursor mode when action on keyrelease is disabled
((finddisplay 91919) displayctrl 9922) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)];
((finddisplay 91919) displayctrl 9922) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)];
setMousePosition [0.5, 0.5];
};

View File

@ -19,7 +19,7 @@ _calledByClicking = _this select 1;
if (GVAR(openedMenuType) < 0) exitWith {true};
if (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then {
closeDialog 0;
(findDisplay 91919) closeDisplay 2;
};
if(GVAR(actionSelected)) then {

View File

@ -14,16 +14,16 @@
GVAR(currentOptions) = [];
private ["_player","_numInteractObjects","_numInteractions","_actionsVarName","_classActions","_target","_player","_action","_cameraPos","_cameraDir", "_lambda", "_nearestObjects", "_pos"];
private ["_player","_numInteractObjects","_numInteractions","_actionsVarName","_classActions","_target","_player","_action","_cameraPos","_cameraDir", "_lambda", "_nearestObjects", "_pos", "_virtualPoint", "_wavesAtOrigin", "_wavesAtVirtualPoint"];
_player = ACE_player;
_cameraPos = (positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL);
_cameraDir = ((positionCameraToWorld [0, 0, 1]) call EFUNC(common,positionToASL)) vectorDiff _cameraPos;
_fnc_renderNearbyActions = {
// Render all nearby interaction menus
#define MAXINTERACTOBJECTS 3
_cameraPos = (positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL);
_cameraDir = ((positionCameraToWorld [0, 0, 1]) call EFUNC(common,positionToASL)) vectorDiff _cameraPos;
GVAR(foundActions) = [];
GVAR(lastTimeSearchedActions) = diag_tickTime;
@ -101,19 +101,26 @@ _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;
};
GVAR(collectedActionPoints) resize 0;
// Render nearby actions, unit self actions or vehicle self actions as appropiate
if (GVAR(openedMenuType) == 0) then {
@ -132,3 +139,29 @@ if (GVAR(openedMenuType) == 0) then {
} else {
ACE_player call _fnc_renderSelfActions;
};
if (count GVAR(collectedActionPoints) > 1) then {
// Do the oclusion pass
// Order action points according to z
GVAR(collectedActionPoints) sort true;
private ["_i","_j","_delta"];
for [{_i = count GVAR(collectedActionPoints) - 1}, {_i > 0}, {_i = _i - 1}] do {
for [{_j = _i - 1}, {_j >= 0}, {_j = _j - 1}] do {
// Check if action point _i is ocluded by _j
_delta = vectorNormalized ((GVAR(collectedActionPoints) select _i select 1) vectorDiff (GVAR(collectedActionPoints) select _j select 1));
// If _i is inside a cone with 20º half angle with origin on _j
if (_delta select 2 > 0.94) exitWith {
GVAR(collectedActionPoints) deleteAt _i;
};
};
};
};
// Render the non-ocluded points
{
EXPLODE_3_PVT(_x,_z,_sPos,_activeActionTree);
[[], _activeActionTree, _sPos, [180,360]] call FUNC(renderMenu);
} forEach GVAR(collectedActionPoints);

View File

@ -44,8 +44,8 @@ if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player &&
if (_actualDistance > _distance) exitWith {true};
if (_actualDistance > 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
};
@ -93,11 +93,17 @@ _fnc_print = {
// Check if there's something left for rendering
if (count _activeActionTree == 0) exitWith {false};
//EXPLODE_2_PVT(_activeActionTree,_actionData,_actionChildren);
BEGIN_COUNTER(fnc_renderMenus);
[[], _activeActionTree, _sPos, [180,360]] call FUNC(renderMenu);
// IGNORE_PRIVATE_WARNING(_cameraPos,_cameraDir);
if (count _pos > 2) then {
_sPos pushBack (((_pos call EFUNC(common,positionToASL)) vectorDiff _cameraPos) vectorDotProduct _cameraDir);
} else {
_sPos pushBack 0;
};
// Add action point for oclusion and rendering
GVAR(collectedActionPoints) pushBack [_sPos select 2, _sPos, _activeActionTree];
END_COUNTER(fnc_renderMenus);

View File

@ -23,6 +23,10 @@ PARAMS_4(_text,_icon,_sPos,_textSettings);
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)]);
if (GVAR(useCursorMenu)) then {
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)];
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)];
};
};
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);

View File

@ -20,6 +20,10 @@ 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)]);
if (GVAR(useCursorMenu)) then {
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)];
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)];
};
};
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);

View File

@ -10,7 +10,7 @@
<Polish>Zawsze wyświetlaj kursor dla własnej interakcji</Polish>
<French>Toujours afficher le curseur pour les interactions sur soi-même</French>
<Hungarian>Mindig legyen a saját cselekvés kurzorja látható</Hungarian>
<Italian>Mostra sempre il cursore per le auto interazioni</Italian>
<Italian>Mostra sempre il cursore per le interazioni su se stessi</Italian>
<Portuguese>Sempre mostrar cursor para interação pessoal</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorInteraction">
@ -23,6 +23,7 @@
<Czech>Zobrazit kurzor v menu pro interakci</Czech>
<German>Immer den Cursor für Fremd-Interaktionen anzeigen</German>
<Hungarian>Mindig legyen a cselekvés kurzorja látható</Hungarian>
<Portuguese>Sempre mostrar cursor para interação</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_UseListMenu">
<English>Display interaction menus as lists</English>
@ -34,6 +35,7 @@
<Czech>Zobrazit menu interakce jako seznam</Czech>
<German>Interaktionsmenü in Listen anzeigen</German>
<Hungarian>Cselekvő menük listaként való megjelenítése</Hungarian>
<Portuguese>Mostrar menu de interação como listas</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_InteractKey">
<English>Interact Key</English>
@ -56,7 +58,7 @@
<Polish>Klawisz własnej interakcji</Polish>
<French>Touche d'interaction personnelle</French>
<Hungarian>Saját cselekvő gomb</Hungarian>
<Italian>Tasto per auto interazioni</Italian>
<Italian>Tasto interazione su se stessi</Italian>
<Portuguese>Tecla de Interação Pessoal</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_SelfActionsRoot">
@ -68,7 +70,7 @@
<Polish>Własne akcje</Polish>
<French>Interaction personnelle</French>
<Hungarian>Saját cselekvések</Hungarian>
<Italian>Auto interazioni</Italian>
<Italian>Interazioni su se stessi</Italian>
<Portuguese>Ações Pessoais</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_VehicleActionsRoot">
@ -93,6 +95,7 @@
<Russian>Взаимодействие - Текст Макс.</Russian>
<Spanish>Interacción - Texto al max.</Spanish>
<Hungarian>Cselekvés - Szöveg max.</Hungarian>
<Portuguese>Interação - Max. de Texto</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorTextMin">
<English>Interaction - Text Min</English>
@ -104,6 +107,7 @@
<Russian>Взаимодействие - Текст Мин.</Russian>
<Spanish>Interacción - Texto al min.</Spanish>
<Hungarian>Cselekvés - Szöveg min.</Hungarian>
<Portuguese>Interação - Min. de Texto</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorShadowMax">
<English>Interaction - Shadow Max</English>
@ -115,6 +119,7 @@
<Russian>Взаимодействие - Тень Макс.</Russian>
<Spanish>Interacción - Sombras al max.</Spanish>
<Hungarian>Cselekvés - Árnyék max.</Hungarian>
<Portuguese>Interação - Max. de Sombra</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorShadowMin">
<English>Interaction - Shadow Min</English>
@ -126,6 +131,7 @@
<Russian>Взаимодействие - Тень Мин.</Russian>
<Spanish>Interacción - Sombras al min.</Spanish>
<Hungarian>Cselekvés - Árnyék min.</Hungarian>
<Portuguese>Interação - Min. de Sombra</Portuguese>
</Key>
<Key ID="STR_ACE_Interact_cursorKeepCentered">
<English>Keep cursor centered</English>
@ -136,6 +142,8 @@
<Polish>Utrzymaj kursor wyśrodkowany</Polish>
<Spanish>Mantener el cursor centrado</Spanish>
<Czech>Udržuj kurzor na středu</Czech>
<Portuguese>Manter o cursor centralizado</Portuguese>
<Italian>Mantieni il cursore centrato</Italian>
</Key>
<Key ID="STR_ACE_Interact_cursorKeepCenteredDescription">
<English>Keeps cursor centered and pans the option menu around. Useful if screen size is limited.</English>
@ -146,6 +154,8 @@
<Hungarian>Középen tartja a kurzort, és a menüelemeket mozgatja. Hasznos lehetőség korlátozott képméretnél.</Hungarian>
<Polish>Utrzymuje kursor na środku ekranu, zamiast tego ruch myszą powoduje przesuwanie menu interakcji. Użyteczne w przypadku kiedy rozmiar ekranu jest ograniczony.</Polish>
<Spanish>Mantiene el cursor centrado y despliega los menús alrededor. Útil si el tamaño de la pantalla es limitado.</Spanish>
<Portuguese>Manter o cursor centralizado e mover o menu de opções. Útil caso o tamanho da tela seja limitado.</Portuguese>
<Italian>Mantieni il cursore centrato e sposta il menù intorno. Utile se lo schermo è piccolo.</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_ActionOnKeyRelease">
<English>Do action when releasing menu key</English>
@ -155,6 +165,9 @@
<French>Action au relachement de touche</French>
<Russian>Выполнять действие при отпускании кнопки взаимодействия</Russian>
<Spanish>Realizar la acción al soltar la tecla menu</Spanish>
<Portuguese>Execute a ação quando soltar a tecla de menu</Portuguese>
<Hungarian>Cselekvés végrehajtása a menügomb elengedésekor</Hungarian>
<Italian>Esegui l'azione quando rilasci il tasto menu</Italian>
</Key>
<Key ID="STR_ACE_Interact_textSize">
<English>Interaction Text Size</English>
@ -164,6 +177,9 @@
<Russian>Размер текста (меню взаимодействия)</Russian>
<Spanish>Tamaño del texto de interacción</Spanish>
<Polish>Rozmiar tekstu interakcji</Polish>
<Portuguese>Tamanho do texto de interação</Portuguese>
<Hungarian>Cselekvő szöveg mérete</Hungarian>
<Italian>Dimensione del testo d'interazione</Italian>
</Key>
<Key ID="STR_ACE_Interact_shadowSetting">
<English>Interaction Text Shadow</English>
@ -173,6 +189,9 @@
<Russian>Тень от текста (меню взаимодействия)</Russian>
<Spanish>Sombra del texto de interacción</Spanish>
<Polish>Cień tekstu interakcji</Polish>
<Portuguese>Sombra do texto de interação</Portuguese>
<Hungarian>Cselekvő szöveg árnyéka</Hungarian>
<Italian>Ombra del testo d'interazione</Italian>
</Key>
<Key ID="STR_ACE_Interact_shadowSettingDescription">
<English>Allows controlling the text's shadow. Outline ignores custom shadow colors.</English>
@ -182,6 +201,9 @@
<Russian>Дает возможность изменять тень, отбрасываемую текстом. Контур не зависит от выбранного цвета тени.</Russian>
<Spanish>Permite contolar la sombra del texto. El contorno ignora los colores personalizados de la sombra.</Spanish>
<Polish>Pozwala kontrolować cień tekstu. Kontury ignorują niestandardowe kolory cienia.</Polish>
<Portuguese>Permite controlar a sombra do texto. Contorno ignora sombras com cores customizadas.</Portuguese>
<Hungarian>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.</Hungarian>
<Italian>Permette di controllare l'ombra del testo. L'impostazione "Contorno" ignora il colore dell'ombra.</Italian>
</Key>
<Key ID="STR_ACE_Interact_shadowOutline">
<English>Outline</English>
@ -191,6 +213,9 @@
<Russian>Контур</Russian>
<Spanish>Contorno</Spanish>
<Polish>Kontur</Polish>
<Portuguese>Contorno</Portuguese>
<Hungarian>Körvonal</Hungarian>
<Italian>Contorno</Italian>
</Key>
</Package>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -1,46 +1,44 @@
#define HSPACE 0.5-2.0/16/2
#define VSPACE 0.5-0.3/9/2
class RscStructuredText;
class ACE_Interaction_Button_Base {
tooltip = "";
//action = "ACE_Interaction_isMousePressed = true;(findDisplay 1713999) closeDisplay 1;_action = ACE_Interaction_Buttons select ACE_Interaction_SelectedButton;ACE_Interaction_SelectedButton = -1; if (call (_action select 2)) then {call (_action select 1)};";
action = "";
tooltip = "";
//action = "ACE_Interaction_isMousePressed = true;(findDisplay 1713999) closeDisplay 1;_action = ACE_Interaction_Buttons select ACE_Interaction_SelectedButton;ACE_Interaction_SelectedButton = -1; if (call (_action select 2)) then {call (_action select 1)};";
action = "";
idc = -1;
access = 0;
type = 1;
text = "";
font = "PuristaMedium";
sizeEx = "0.8 / 40 / (getResolution select 5)";
shadow = 2;
idc = -1;
access = 0;
type = 1;
text = "";
font = "PuristaMedium";
sizeEx = "0.8 / 40 / (getResolution select 5)";
shadow = 2;
style = 2;
x = 0;
y = 0;
w = 2.0 / 16 * safezoneW;
h = 0.3 / 9 * safezoneH;
style = 2;
x = 0;
y = 0;
w = 2.0 / 16 * safezoneW;
h = 0.3 / 9 * safezoneH;
offsetX = 0.003;
offsetY = 0.003;
offsetPressedX = 0.002;
offsetPressedY = 0.002;
borderSize = 0;
offsetX = 0.003;
offsetY = 0.003;
offsetPressedX = 0.002;
offsetPressedY = 0.002;
borderSize = 0;
colorText[] = {1,1,1,1};
colorDisabled[] = {0.5,0.5,0.5,1};
colorBackground[] = {0,0,0,0.8};
colorBackgroundDisabled[] = {0,0,0,0.8};
colorBackgroundActive[] = {1,1,1,0};
colorFocused[] = {1,1,1,1};
colorShadow[] = {0,0,0,0};
colorBorder[] = {1,1,1,0.8};
colorText[] = {1,1,1,1};
colorDisabled[] = {0.5,0.5,0.5,1};
colorBackground[] = {0,0,0,0.8};
colorBackgroundDisabled[] = {0,0,0,0.8};
colorBackgroundActive[] = {1,1,1,0};
colorFocused[] = {1,1,1,1};
colorShadow[] = {0,0,0,0};
colorBorder[] = {1,1,1,0.8};
soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1};
soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1};
soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1};
soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1};
soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.09,1};
soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.09,1};
soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1};
soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1};
};
class RscListbox;
@ -49,86 +47,86 @@ class RscText;
#define X_OFFSET 0.2
class RscACE_SelectAnItem {
idd = 8854;
movingEnable = 0;
class controls {
class back:IGUIBack {
x = X_OFFSET;
y = 0;
w = 0.6;
h = 0.71;
colorBackground[] = {0, 0, 0, 0.2};
};
class header: RscText{
idc = 8870;
x = X_OFFSET + 0.005;
y = 0.005;
w = 0.59;
h = 0.05;
style = 0x02;
text = "";
};
class itemList:RscListBox {
onMouseButtonDblClick = "_this call ACE_Interaction_fnc_onSelectMenuDblClick";
idc = 8866;
x = X_OFFSET + 0.005;
w = 0.59;
h = 0.54;
y = 0.06;
};
idd = 8854;
movingEnable = 0;
class controls {
class back:IGUIBack {
x = X_OFFSET;
y = 0;
w = 0.6;
h = 0.71;
colorBackground[] = {0, 0, 0, 0.2};
};
class header: RscText{
idc = 8870;
x = X_OFFSET + 0.005;
y = 0.005;
w = 0.59;
h = 0.05;
style = 0x02;
text = "";
};
class itemList:RscListBox {
onMouseButtonDblClick = "_this call ACE_Interaction_fnc_onSelectMenuDblClick";
idc = 8866;
x = X_OFFSET + 0.005;
w = 0.59;
h = 0.54;
y = 0.06;
};
class cancelBtnBackground: ACE_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
};
class approveBtnBackground: ACE_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
};
class cancelBtnBackground: ACE_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
};
class approveBtnBackground: ACE_Interaction_Button_Base {
type = 0;
style = 2;
idc = -1;
colorBackground[] = {0,0,0,0.5};
colorBackgroundDisabled[] = {0,0,0,0.5};
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
};
class cancelBtn: ACE_Interaction_Button_Base {
idc = 8855;
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
style = 2;
text = $STR_ACE_Interaction_Back; //$STR_ACE_Interaction_CancelSelection;
action = "call ACE_Interaction_fnc_hideMenu;"; //'Default' call ACE_Interaction_fnc_openMenu; 'Default' call ACE_Interaction_fnc_openMenuSelf;
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
class cancelBtn: ACE_Interaction_Button_Base {
idc = 8855;
x = X_OFFSET + 0.005;
w = 0.15;
h = 0.1;
y = 0.605;
style = 2;
text = $STR_ACE_Interaction_Back; //$STR_ACE_Interaction_CancelSelection;
action = "call ACE_Interaction_fnc_hideMenu;"; //'Default' call ACE_Interaction_fnc_openMenu; 'Default' call ACE_Interaction_fnc_openMenuSelf;
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
};
class approveBtn: ACE_Interaction_Button_Base {
idc = 8860;
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
style = 2;
text = $STR_ACE_Interaction_MakeSelection;
action = "call ACE_Interaction_fnc_hideMenu;";
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
};
};
class approveBtn: ACE_Interaction_Button_Base {
idc = 8860;
x = X_OFFSET + 0.445;
y = 0.605;
h = 0.1;
w = 0.15;
style = 2;
text = $STR_ACE_Interaction_MakeSelection;
action = "call ACE_Interaction_fnc_hideMenu;";
colorBackground[] = {0,0,0,0};
colorBackgroundDisabled[] = {0,0,0,0};
colorBackgroundActive[] = {1,1,1,0.2};
colorFocused[] = {0,0,0,0};
};
};
};
#define GUI_GRID_W (0.025)
@ -136,64 +134,64 @@ class RscACE_SelectAnItem {
class RscPicture;
class RscInteractionIcon: RscPicture {
x = 19.25 * GUI_GRID_W;
y = 15.75 * GUI_GRID_H;
w = 2*GUI_GRID_H;
h = 2*GUI_GRID_H;
x = 19.25 * GUI_GRID_W;
y = 15.75 * GUI_GRID_H;
w = 2*GUI_GRID_H;
h = 2*GUI_GRID_H;
};
class RscInteractionHelperIcon: RscInteractionIcon {
x = 20 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = GUI_GRID_H;
h = GUI_GRID_H;
x = 20 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = GUI_GRID_H;
h = GUI_GRID_H;
};
class RscInteractionText: RscText{
x = 21 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = 8 * GUI_GRID_W;
h = 1.5 * GUI_GRID_H;
x = 21 * GUI_GRID_W;
y = 16 * GUI_GRID_H;
w = 8 * GUI_GRID_W;
h = 1.5 * GUI_GRID_H;
};
class RscTitles {
class GVAR(InteractionHelper) {
idd = 9930;
enableSimulation = 1;
movingEnable = 0;
fadeIn=0.5;
fadeOut=0.5;
duration = 10e10;
onLoad = "uiNamespace setVariable ['ACE_Helper_Display', _this select 0];";
class GVAR(InteractionHelper) {
idd = 9930;
enableSimulation = 1;
movingEnable = 0;
fadeIn=0.5;
fadeOut=0.5;
duration = 10e10;
onLoad = "uiNamespace setVariable ['ACE_Helper_Display', _this select 0];";
class controls {
class SelectIcon: RscInteractionHelperIcon{
idc = 1200;
text = PATHTOF(UI\mouse_left_ca.paa);
y = 17.5 * GUI_GRID_H;
};
class SelectText: RscInteractionText{
idc = 1000;
y = 17 * GUI_GRID_H;
text = $STR_ACE_Interaction_MakeSelection;
};
class GoBackIcon: RscInteractionHelperIcon{
idc = 1201;
text = PATHTOF(UI\mouse_right_ca.paa);
y = 19.5 * GUI_GRID_H;
};
class GoBackText: RscInteractionText{
idc = 1001;
y = 19 * GUI_GRID_H;
text = $STR_ACE_Interaction_Back;
};
class ScrollIcon: RscInteractionHelperIcon{
idc = 1202;
text = PATHTOF(UI\mouse_scroll_ca.paa);
y = 18.5 * GUI_GRID_H;
};
class ScrollText: RscInteractionText{
idc = 1002;
y = 18 * GUI_GRID_H;
text = $STR_ACE_Interaction_ScrollHint;
};
class controls {
class SelectIcon: RscInteractionHelperIcon{
idc = 1200;
text = PATHTOF(UI\mouse_left_ca.paa);
y = 17.5 * GUI_GRID_H;
};
class SelectText: RscInteractionText{
idc = 1000;
y = 17 * GUI_GRID_H;
text = $STR_ACE_Interaction_MakeSelection;
};
class GoBackIcon: RscInteractionHelperIcon{
idc = 1201;
text = PATHTOF(UI\mouse_right_ca.paa);
y = 19.5 * GUI_GRID_H;
};
class GoBackText: RscInteractionText{
idc = 1001;
y = 19 * GUI_GRID_H;
text = $STR_ACE_Interaction_Back;
};
class ScrollIcon: RscInteractionHelperIcon{
idc = 1202;
text = PATHTOF(UI\mouse_scroll_ca.paa);
y = 18.5 * GUI_GRID_H;
};
class ScrollText: RscInteractionText{
idc = 1002;
y = 18 * GUI_GRID_H;
text = $STR_ACE_Interaction_ScrollHint;
};
};
};
};
};

View File

@ -3,7 +3,6 @@ ace_interaction
Provides interaction options between units.
## Maintainers
The people responsible for merging changes to this component or answering potential questions.

View File

@ -1,26 +1,24 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interact_menu"};
author[] = {"commy2", "KoffeinFlummi", "esteldunedain", "bux578"};
authorUrl = "https://github.com/commy2/";
VERSION_CONFIG;
};
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interact_menu"};
author[] = {"commy2", "KoffeinFlummi", "esteldunedain", "bux578"};
authorUrl = "https://github.com/commy2/";
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include <Menu_Config.hpp>
#include "Menu_Config.hpp"
class ACE_Settings {
class GVAR(EnableTeamManagement) {
value = 1;
typeName = "BOOL";
};
class GVAR(EnableTeamManagement) {
value = 1;
typeName = "BOOL";
};
};

View File

@ -1,36 +0,0 @@
/*
Author: Garth de Wet (LH)
Description:
Adds an item to the select menu
Parameters:
0: ARRAY/NUMBER - List container
1: String - Display Name
2: String - Picture
3: String/code - data
Returns:
ARRAY/Number
Example:
*/
#include "script_component.hpp"
private ["_container", "_displayName", "_picture", "_data", "_index"];
_container = _this select 0;
_displayName = _this select 1;
_picture = _this select 2;
_data = _this select 3;
if (_picture == "" || _picture == "PictureThing") then {
_picture = QUOTE(PATHTOF(UI\dot_ca.paa));
};
_index = lbAdd [_container, _displayName];
lbSetData [_container, _index, str _data];
lbSetPicture [_container, _index, _picture];
_container

View File

@ -2,7 +2,7 @@
* Author: esteldunedain
* Mount unit actions inside passenger submenu
*
* Argument:
* Arguments:
* 0: Vehicle <OBJECT>
* 1: Player <OBJECT>
* 3: Parameters <ARRAY>
@ -10,14 +10,17 @@
* Return value:
* Children actions <ARRAY>
*
* Example:
* array = [target, player, [params]] call ace_interaction_fnc_addPassengerAction
*
* Public: No
*/
#include "script_component.hpp"
EXPLODE_3_PVT(_this,_vehicle,_player,_parameters);
EXPLODE_1_PVT(_parameters,_unit);
private ["_unit", "_actions", "_actionTrees", "_varName"];
_unit = _parameters select 0;
private ["_varName", "_actionTrees", "_actions"];
_varName = format [QEGVAR(interact_menu,Act_%1), typeOf _unit];
_actionTrees = missionNamespace getVariable [_varName, []];

Some files were not shown because too many files have changed in this diff Show More