Merge branch 'master' of https://github.com/KoffeinFlummi/ACE3 into wselect

This commit is contained in:
commy2 2015-04-20 20:07:48 +02:00
commit 43707342a8
101 changed files with 1325 additions and 394 deletions

View File

@ -2,7 +2,6 @@
ADDON = false;
PREP(calculateAirDensity);
PREP(calculateAmmoTemperatureVelocityShift);
PREP(calculateAtmosphericCorrection);
PREP(calculateBarrelLengthVelocityShift);

View File

@ -15,4 +15,8 @@ class CfgPatches {
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include "RscTitles.hpp"
#include "ACE_Settings.hpp"
#include "ACE_Settings.hpp"
class ACE_Extensions {
extensions[] += {"ace_advanced_ballistics"};
};

View File

@ -1,7 +1,7 @@
/*
* Author: Ruthberg
*
* Displays a wind info (colored arrow) in the top left corner of the screen
* Calculates the air density
*
* Arguments:
* 0: temperature - degrees celcius <NUMBER>

View File

@ -24,7 +24,7 @@ _pressure = _this select 2; // in hPa
_relativeHumidity = _this select 3; // as ratio 0-1
_atmosphereModel = _this select 4; // "ICAO" or "ASM"
_airDensity = [_temperature, _pressure, _relativeHumidity] call FUNC(calculateAirDensity);
_airDensity = [_temperature, _pressure, _relativeHumidity] call EFUNC(weather,calculateAirDensity);
if (_atmosphereModel == "ICAO") then {
(STD_AIR_DENSITY_ICAO / _airDensity) * _ballisticCoefficient

View File

@ -110,7 +110,7 @@ _stabilityFactor = 1.5;
if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
_barometricPressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL _bullet) select 2)) / 7990) - 10 * overcast;
_barometricPressure = ((getPosASL _bullet) select 2) call EFUNC(weather,calculateBarometricPressure);
_stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor);
};
@ -288,7 +288,7 @@ if (GVAR(AdvancedAirDragEnabled)) then {
};
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
_pressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + (_bulletPosition select 2)) / 7990) - 10 * overcast;
_pressure = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure);
_temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2);
_humidity = EGVAR(weather,currentHumidity);
_airDensity = STD_AIR_DENSITY_ICAO;
@ -315,7 +315,7 @@ if (GVAR(AdvancedAirDragEnabled)) then {
_bulletVelocity = _bulletVelocity vectorDiff _accel;
} else {
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
_pressureDeviation = 1013.25 * exp(-(EGVAR(weather,Altitude) + (_bulletPosition select 2)) / 7990) - 1013.25 - 10 * overcast;
_pressureDeviation = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure) - 1013.25;
_temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2);
_humidity = EGVAR(weather,currentHumidity);
_airFriction = _airFriction + ((_temperature - 15) * 0.0000015 + _humidity * 0.0000040 + _pressureDeviation * -0.0000009);

View File

@ -9,6 +9,7 @@
<Russian>Показать информацию о ветре</Russian>
<French>Afficher les info sur le vent</French>
<Spanish>Mostrar información del viento</Spanish>
<German>Windinformationen anzeigen</German>
</Key>
<Key ID="STR_ACE_AdvancedBallistics_ProtractorKey">
<English>Show Protractor</English>
@ -17,6 +18,7 @@
<Russian>Показать транспортир</Russian>
<French>Afficher le rapporteur</French>
<Spanish>Mostrar transportador</Spanish>
<German>Winkelmesser anzeigen</German>
</Key>
</Package>
</Project>

View File

@ -133,40 +133,6 @@ class ATragMX_RscListNBox: ATragMX_RscListBox {
idcLeft=-1;
idcRight=-1;
};
class ATragMX_RscControlsGroup {
type=15;
idc=-1;
style=16;
x=0;
y=0;
w=1;
h=1;
shadow=0;
class VScrollbar {
color[]={1,1,1,0.6};
width=0.021;
autoScrollSpeed=-1;
autoScrollDelay=5;
autoScrollRewind=0;
shadow=0;
};
class HScrollbar {
color[]={1,1,1,0.6};
height=0.028;
shadow=0;
};
class ScrollBar {
color[]={1,1,1,0.6};
colorActive[]={1,1,1,1};
colorDisabled[]={1,1,1,0.3};
thumb="#(argb,8,8,3)color(1,1,1,1)";
arrowEmpty="#(argb,8,8,3)color(1,1,1,1)";
arrowFull="#(argb,8,8,3)color(1,1,1,1)";
border="#(argb,8,8,3)color(1,1,1,1)";
};
class Controls {
};
};
class ATragMX_RscLineBreak {
idc=-1;
type=98;
@ -1149,6 +1115,13 @@ class ATragMX_Display {
idc=120060;
y=0.265*safezoneH+safezoneY+0.520;
};
class TEXT_GUN_AMMO_DATA_ZERO_RANGE_METER_INDICATOR: TEXT_GUN_AMMO_DATA_BORE_HEIGHT {
idc=120061;
w=0.05;
x=0.550*safezoneW+safezoneX+0.315;
y=0.265*safezoneH+safezoneY+0.520;
text="";
};
class TEXT_GUN_AMMO_DATA_DONE: TEXT_TARGET_SPEED_ASSIST_DONE {
idc=12008;
action=QUOTE(1 call FUNC(toggle_gun_ammo_data));
@ -1361,6 +1334,13 @@ class ATragMX_Display {
idc=140060;
y=0.265*safezoneH+safezoneY+0.520;
};
class TEXT_TARGET_DATA_TARGET_RANGE_METER_INDICATOR: TEXT_TARGET_DATA_LATITUDE {
idc=140061;
w=0.05;
x=0.550*safezoneW+safezoneX+0.315;
y=0.265*safezoneH+safezoneY+0.520;
text="";
};
class TEXT_TARGET_DATA_DONE: TEXT_TARGET_SPEED_ASSIST_DONE {
idc=14008;
action=QUOTE(1 call FUNC(toggle_target_data));

View File

@ -5,39 +5,39 @@
if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then {
GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList";
} else {
// Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Elevation Scope Step, Windage Scope Step, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model
GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0659, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ],
// Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model
GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006400, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ],
["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ],
["12.7x99mm" , 853, 100, 0.0623, -0.0008600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003740, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ],
["12.7x99mm" , 853, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
["12.7x54mm" , 300, 100, 0.3394, -0.0014000, 3.81, 0, 0.338, 0.338, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ],
["12.7x54mm" , 300, 100, 0.3395, -0.0001400, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ],
[".408 Chey Tac" , 910, 100, 0.0569, -0.0004800, 3.81, 0, 0.338, 0.338, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ],
[".408 Chey Tac" , 910, 100, 0.0571, -0.0003950, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.970, 1, "ASM" ],
["9.3×64mm" , 870, 100, 0.0619, -0.0007500, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ],
["9.3×64mm" , 870, 100, 0.0619, -0.0010600, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ],
[".338LM 250gr" , 880, 100, 0.0598, -0.0006060, 3.81, 0, 0.338, 0.338, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"],
[".338LM 300gr" , 800, 100, 0.0677, -0.0005350, 3.81, 0, 0.338, 0.338, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"],
[".338LM API526" , 880, 100, 0.0601, -0.0006730, 3.81, 0, 0.338, 0.338, 120, 0, 0, 16.39, 8.58, 25.40, 0.290, 7, "ICAO"],
[".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"],
[".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0008300, 3.81, 0, 0.338, 0.338, 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, 0.338, 0.338, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"],
[".300WM Berger OTM" , 853, 100, 0.0622, -0.0007600, 3.81, 0, 0.338, 0.338, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"],
[".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"],
[".300WM Berger OTM" , 853, 100, 0.0622, -0.0007600, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"],
["7.62x54mmR" , 800, 100, 0.0692, -0.0010230, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"],
["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, 0.338, 0.338, 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, 0.338, 0.338, 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, 0.338, 0.338, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"],
["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004910, 3.81, 0, 0.338, 0.338, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "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 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, 0.338, 0.338, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"],
["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 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"],
["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"],
["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 0.338, 0.338, 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, 0.338, 0.338, 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, 0.338, 0.338, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ]];
["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" ]];
[] call FUNC(clear_user_data);
profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];

View File

@ -77,4 +77,4 @@ GVAR(rangeCardData) = [];
private ["_result"];
_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000,
[_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution);
[_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude, _directionOfFire] call FUNC(calculate_solution);

View File

@ -35,6 +35,6 @@ _barometricPressure = 1013.25;
_relativeHumidity = 0;
private ["_result"];
_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0] call FUNC(calculate_solution);
_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _airFriction, 1, "ICAO", false, 1.5, 0, 0, 0] call FUNC(calculate_solution);
_scopeBaseAngle + (_result select 0) / 60

View File

@ -43,7 +43,7 @@
*/
#include "script_component.hpp"
private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude"];
private ["_scopeBaseAngle", "_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_temperature", "_barometricPressure", "_relativeHumidity", "_simSteps", "_windSpeed1", "_windSpeed2", "_windDirection", "_inclinationAngle", "_targetSpeed", "_targetRange", "_drag", "_bc", "_dragModel", "_atmosphereModel", "_storeRangeCardData", "_stabilityFactor", "_twistDirection", "_latitude", "_directionOfFire"];
_scopeBaseAngle = _this select 0;
_bulletMass = _this select 1;
_boreHeight = _this select 2;
@ -66,6 +66,7 @@ _storeRangeCardData = _this select 17;
_stabilityFactor = _this select 18;
_twistDirection = _this select 19;
_latitude = _this select 20;
_directionOfFire = _this select 21;
private ["_bulletPos", "_bulletVelocity", "_bulletAccel", "_bulletSpeed", "_gravity", "_deltaT"];
_bulletPos = [0, 0, 0];
@ -114,6 +115,12 @@ _speedTotal = 0;
_stepsTotal = 0;
_speedAverage = 0;
private ["_eoetvoesMultiplier"];
_eoetvoesMultiplier = 0;
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
_eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire);
};
_TOF = 0;
_bulletPos set [0, 0];
@ -136,7 +143,6 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false]) then {
private ["_drag"];
_drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then {
parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed]))
} else {
@ -170,16 +176,19 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
_kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2));
_kineticEnergy = _kineticEnergy * 0.737562149;
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then {
if ((_bulletPos select 1) > 0) then {
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then {
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
_windage1 = _windage1 + _horizontalCoriolis;
_windage2 = _windage2 + _horizontalCoriolis;
};
};
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
if ((_bulletPos select 1) > 0) then {
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
_elevation = _elevation + _verticalCoriolis;
};
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then {
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
_windage1 = _windage1 + _spinDrift;
@ -207,16 +216,19 @@ if (_targetRange != 0) then {
_kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2));
_kineticEnergy = _kineticEnergy * 0.737562149;
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false])) then {
if ((_bulletPos select 1) > 0) then {
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then {
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
_windage1 = _windage1 + _horizontalCoriolis;
_windage2 = _windage2 + _horizontalCoriolis;
};
};
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
if ((_bulletPos select 1) > 0) then {
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
_elevation = _elevation + _verticalCoriolis;
};
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then {
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
_windage1 = _windage1 + _spinDrift;

View File

@ -72,7 +72,7 @@ _targetRange = GVAR(targetRange) select GVAR(currentTarget);
private ["_result"];
_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000,
[_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude] call FUNC(calculate_solution);
[_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude, _directionOfFire] call FUNC(calculate_solution);
GVAR(elevationOutput) set [GVAR(currentTarget), _result select 0];
GVAR(windage1Output) set [GVAR(currentTarget), (_result select 1) select 0];

View File

@ -4,7 +4,8 @@
*
* Arguments:
* gunID <number>
* update solution <BOOL>
* restore workingMemory from gunList <BOOL>
* update display <BOOL>
*
* Return Value:
* Nothing
@ -16,23 +17,30 @@
*/
#include "script_component.hpp"
private ["_gunID", "_updateSolution"];
_gunID = _this select 0;
_updateSolution = _this select 1;
private ["_gunID", "_restoreMemory", "_updateDisplay"];
_gunID = _this select 0;
_restoreMemory = _this select 1;
_updateDisplay = _this select 2;
if (_gunID < 0 || _gunID > (count GVAR(gunList)) - 1) exitWith {};
GVAR(workingMemory) = +(GVAR(gunList) select _gunID);
if (_restoreMemory) then {
GVAR(workingMemory) = +(GVAR(gunList) select _gunID);
};
GVAR(currentGun) = _gunID;
lbSetCurSel [6000, GVAR(currentGun)];
if ((GVAR(scopeUnits) select GVAR(currentScopeUnit)) != "Clicks") then {
GVAR(currentScopeUnit) = GVAR(workingMemory) select 6;
if (_updateDisplay) then {
lbSetCurSel [6000, GVAR(currentGun)];
};
[] call FUNC(update_gun);
[] call FUNC(update_gun_ammo_data);
GVAR(currentScopeUnit) = 0 max (GVAR(workingMemory) select 6) min 3;
GVAR(currentScopeClickUnit) = 0 max (GVAR(workingMemory) select 7) min 2;
GVAR(currentScopeClickNumber) = 1 max (GVAR(workingMemory) select 8) min 10;
if (_updateDisplay) then {
[] call FUNC(update_gun);
[] call FUNC(update_gun_ammo_data);
};
GVAR(elevationOutput) set [GVAR(currentTarget), 0];
GVAR(windage1Output) set [GVAR(currentTarget), 0];
@ -41,6 +49,6 @@ GVAR(leadOutput) set [GVAR(currentTarget), 0];
GVAR(tofOutput) set [GVAR(currentTarget), 0];
GVAR(velocityOutput) set [GVAR(currentTarget), 0];
if (_updateSolution) then {
if (_updateDisplay) then {
[] call FUNC(calculate_target_solution);
};

View File

@ -29,11 +29,16 @@ profileNamespace setVariable ["ACE_ATragMX_barometricPressure", nil];
profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", nil];
profileNamespace setVariable ["ACE_ATragMX_showWind2", nil];
profileNamespace setVariable ["latitude", nil];
profileNamespace setVariable ["directionOfFire", nil];
profileNamespace setVariable ["ACE_ATragMX_latitude", nil];
profileNamespace setVariable ["ACE_ATragMX_directionOfFire", nil];
profileNamespace setVariable ["ACE_ATragMX_windSpeed1", nil];
profileNamespace setVariable ["ACE_ATragMX_windSpeed2", nil];
profileNamespace setVariable ["ACE_ATragMX_windDirection", nil];
profileNamespace setVariable ["ACE_ATragMX_inclinationAngle", nil];
profileNamespace setVariable ["ACE_ATragMX_targetSpeed", nil];
profileNamespace setVariable ["ACE_ATragMX_targetRange", nil];
profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", nil];
profileNamespace setVariable ["ACE_ATragMX_rangeCardEndRange", nil];
profileNamespace setVariable ["ACE_ATragMX_rangeCardIncrement", nil];
profileNamespace setVariable ["ACE_ATragMX_rangeCardCurrentColumn", nil];

View File

@ -40,6 +40,8 @@ GVAR(showTargetRangeAssist) call FUNC(show_target_range_assist);
GVAR(showTargetSpeedAssist) call FUNC(show_target_speed_assist);
GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer);
[GVAR(currentGun), false, true] call FUNC(change_gun);
{
lbAdd [6000, _x select 0];
} forEach GVAR(gunList);

View File

@ -15,4 +15,6 @@
*/
#include "script_component.hpp"
[(GVAR(currentGun) + (count GVAR(gunList)) + _this) % (count GVAR(gunList)), true] call FUNC(change_gun);
if (!(GVAR(showMainPage) || GVAR(showGunList))) exitWith {};
[(GVAR(currentGun) + (count GVAR(gunList)) + _this) % (count GVAR(gunList)), true, true] call FUNC(change_gun);

View File

@ -18,6 +18,7 @@
GVAR(workingMemory) = +(GVAR(gunList) select 0);
GVAR(scopeUnits) = ["MILs", "TMOA", "SMOA", "Clicks"];
GVAR(scopeClickUnits) = ["TMOA", "SMOA", "MILs"];
GVAR(rangeCardStartRange) = 200;
GVAR(rangeCardEndRange) = 2000;
@ -40,6 +41,8 @@ GVAR(currentUnit) = 2;
GVAR(currentGun) = 0;
GVAR(currentTarget) = 0;
GVAR(currentScopeUnit) = 0;
GVAR(currentScopeClickUnit) = 2;
GVAR(currentScopeClickNumber) = 10;
GVAR(atmosphereModeTBH) = true;
GVAR(altitude) = 0;

View File

@ -17,9 +17,9 @@
GVAR(altitude) = -1000 max parseNumber(ctrlText 130030) min 20000;
GVAR(temperature) = -50 max parseNumber(ctrlText 130040) min 160;
GVAR(barometricPressure) = 0 max parseNumber(ctrlText 130050) min 1350;
GVAR(barometricPressure) = 10 max parseNumber(ctrlText 130050) min 1350;
GVAR(relativeHumidity) = (0 max parseNumber(ctrlText 130060) min 100) / 100;
if (GVAR(currentUnit) == 1) then {
if (GVAR(currentUnit) != 2) then {
GVAR(altitude) = GVAR(altitude) * 0.3048;
GVAR(temperature) = (GVAR(temperature) - 32) / 1.8;
GVAR(barometricPressure) = GVAR(barometricPressure) * 33.86389;
@ -32,12 +32,12 @@ GVAR(windSpeed1) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140020
GVAR(windSpeed2) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140021)) min 50];
GVAR(windDirection) set [GVAR(currentTarget), 1 max Round(parseNumber(ctrlText 140030)) min 12];
_inclinationAngleCosine = 0.5 max parseNumber(ctrlText 140041) min 1;
_inclinationAngleDegree = -60 max parseNumber(ctrlText 140040) min 60;
_inclinationAngleDegree = -60 max round(parseNumber(ctrlText 140040)) min 60;
if (_inclinationAngleDegree != GVAR(inclinationAngle) select GVAR(currentTarget)) then {
GVAR(inclinationAngle) set [GVAR(currentTarget), _inclinationAngleDegree];
} else {
if (_inclinationAngleCosine != Round(cos(GVAR(inclinationAngle) select GVAR(currentTarget)) * 100) / 100) then {
GVAR(inclinationAngle) set [GVAR(currentTarget), acos(_inclinationAngleCosine)];
GVAR(inclinationAngle) set [GVAR(currentTarget), round(acos(_inclinationAngleCosine))];
};
};
GVAR(targetSpeed) set [GVAR(currentTarget), -50 max abs(parseNumber(ctrlText 140050)) min 50];

View File

@ -16,7 +16,7 @@
#include "script_component.hpp"
GVAR(currentUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentUnit", 2]) min 2;
[profileNamespace getVariable ["ACE_ATragMX_currentGun", 0], false] call FUNC(change_gun);
[(profileNamespace getVariable ["ACE_ATragMX_currentGun", 0]), true, false] call FUNC(change_gun);
GVAR(currentTarget) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentTarget", 0]) min 3;
GVAR(currentScopeUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentScopeUnit", 0]) min 3;
@ -35,3 +35,8 @@ GVAR(windDirection) = profileNamespace getVariable ["ACE_ATragMX_windDirection",
GVAR(inclinationAngle) = profileNamespace getVariable ["ACE_ATragMX_inclinationAngle", [0, 0, 0, 0]];
GVAR(targetSpeed) = profileNamespace getVariable ["ACE_ATragMX_targetSpeed", [0, 0, 0, 0]];
GVAR(targetRange) = profileNamespace getVariable ["ACE_ATragMX_targetRange", [0, 0, 0, 0]];
GVAR(rangeCardStartRange) = 0 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardStartRange", 200]) min 3000;
GVAR(rangeCardEndRange) = 0 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardEndRange", 2000]) min 3000;
GVAR(rangeCardIncrement) = 1 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardIncrement", 50]) min 3000;
GVAR(rangeCardCurrentColumn) = 0 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardCurrentColumn", 3]) min 3;

View File

@ -17,7 +17,7 @@
GVAR(showGunAmmoData) = _this;
{ctrlShow [_x, _this]} forEach [12000, 120000, 12001, 120010, 12002, 120020, 12003, 120030, 12004, 120040, 12005, 120050, 12006, 120060, 12007, 12008, 12009, 12010, 12011];
{ctrlShow [_x, _this]} forEach [12000, 120000, 12001, 120010, 12002, 120020, 12003, 120030, 12004, 120040, 12005, 120050, 12006, 120060, 120061, 12007, 12008, 12009, 12010, 12011];
if (_this) then {
[] call FUNC(update_gun_ammo_data);

View File

@ -17,7 +17,7 @@
GVAR(showTargetData) = _this;
{ctrlShow [_x, _this]} forEach [14000, 140000, 14001, 140010, 14002, 141020, 140020, 141021, 140021, 14003, 140030, 14004, 140040, 141040, 141041, 140041, 14005, 140050, 14006, 140060, 14007, 14008, 14009, 14010, 14011];
{ctrlShow [_x, _this]} forEach [14000, 140000, 14001, 140010, 14002, 141020, 140020, 141021, 140021, 14003, 140030, 14004, 140040, 141040, 141041, 140041, 14005, 140050, 14006, 140060, 140061, 14007, 14008, 14009, 14010, 14011];
if (_this) then {
[] call FUNC(update_target_data);

View File

@ -22,6 +22,6 @@ _slopeDistance = _this select 0;
_azimuth = _this select 1;
_inclination = _this select 2;
//_inclination = asin((ACE_player weaponDirection currentWeapon ACE_player) select 2);
GVAR(inclinationAngle) set [GVAR(currentTarget), _inclination];
GVAR(targetRange) set [GVAR(currentTarget), _slopeDistance];
GVAR(inclinationAngle) set [GVAR(currentTarget), round(_inclination)];
GVAR(directionOfFire) set [GVAR(currentTarget), round(_azimuth)];
GVAR(targetRange) set [GVAR(currentTarget), round(_slopeDistance)];

View File

@ -29,11 +29,16 @@ profileNamespace setVariable ["ACE_ATragMX_barometricPressure", GVAR(barometricP
profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", GVAR(relativeHumidity)];
profileNamespace setVariable ["ACE_ATragMX_showWind2", GVAR(showWind2)];
profileNamespace setVariable ["latitude", GVAR(latitude)];
profileNamespace setVariable ["directionOfFire", GVAR(directionOfFire)];
profileNamespace setVariable ["ACE_ATragMX_latitude", GVAR(latitude)];
profileNamespace setVariable ["ACE_ATragMX_directionOfFire", GVAR(directionOfFire)];
profileNamespace setVariable ["ACE_ATragMX_windSpeed1", GVAR(windSpeed1)];
profileNamespace setVariable ["ACE_ATragMX_windSpeed2", GVAR(windSpeed2)];
profileNamespace setVariable ["ACE_ATragMX_windDirection", GVAR(windDirection)];
profileNamespace setVariable ["ACE_ATragMX_inclinationAngle", GVAR(inclinationAngle)];
profileNamespace setVariable ["ACE_ATragMX_targetSpeed", GVAR(targetSpeed)];
profileNamespace setVariable ["ACE_ATragMX_targetRange", GVAR(targetRange)];
profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", GVAR(rangeCardStartRange)];
profileNamespace setVariable ["ACE_ATragMX_rangeCardEndRange", GVAR(rangeCardEndRange)];
profileNamespace setVariable ["ACE_ATragMX_rangeCardIncrement", GVAR(rangeCardIncrement)];
profileNamespace setVariable ["ACE_ATragMX_rangeCardCurrentColumn", GVAR(rangeCardCurrentColumn)];

View File

@ -20,7 +20,7 @@ if (ctrlVisible 6000) then {
true call FUNC(show_main_page);
if (_this) then {
[lbCurSel 6000, true] call FUNC(change_gun);
[lbCurSel 6000, true, true] call FUNC(change_gun);
};
} else {
false call FUNC(show_main_page);

View File

@ -17,18 +17,18 @@
ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 13007);
if (GVAR(currentUnit) != 1) then {
if (GVAR(currentUnit) == 2) then {
ctrlSetText [130040, Str(Round(GVAR(temperature) * 10) / 10)];
} else {
ctrlSetText [130040, Str(Round((GVAR(temperature) * 1.8 + 32) * 10) / 10)];
};
if (GVAR(currentUnit) != 1) then {
if (GVAR(currentUnit) == 2) then {
ctrlSetText [130050, Str(Round(GVAR(barometricPressure)))];
} else {
ctrlSetText [130050, Str(Round(GVAR(barometricPressure) / 33.8638866667 * 100) / 100)];
};
ctrlSetText [130060, Str(Round(GVAR(relativeHumidity) * 100 * 10) / 10)];
if (GVAR(currentUnit) != 1) then {
if (GVAR(currentUnit) == 2) then {
ctrlSetText [130030, Str(Round(GVAR(altitude)))];
} else {
ctrlSetText [130030, Str(Round(GVAR(altitude) * 3.2808399))];

View File

@ -15,18 +15,18 @@
*/
#include "script_component.hpp"
if (GVAR(currentUnit) != 1) then {
if (GVAR(currentUnit) == 2) then {
ctrlSetText [200, Str(Round(GVAR(temperature) * 10) / 10)];
} else {
ctrlSetText [200, Str(Round((GVAR(temperature) * 1.8 + 32) * 10) / 10)];
};
if (GVAR(currentUnit) != 1) then {
if (GVAR(currentUnit) == 2) then {
ctrlSetText [210, Str(Round(GVAR(barometricPressure)))];
} else {
ctrlSetText [210, Str(Round(GVAR(barometricPressure) / 33.8638866667 * 100) / 100)];
};
ctrlSetText [220, Str(Round(GVAR(relativeHumidity) * 100 * 10) / 10)];
if (GVAR(currentUnit) != 1) then {
if (GVAR(currentUnit) == 2) then {
ctrlSetText [230, Str(Round(GVAR(altitude)))];
} else {
ctrlSetText [230, Str(Round(GVAR(altitude) * 3.2808399))];

View File

@ -36,10 +36,15 @@ if (GVAR(currentUnit) != 2) then {
} else {
ctrlSetText [130, Str(Round(GVAR(workingMemory) select 1))];
};
if (GVAR(currentUnit) != 1) then {
ctrlSetText [140, Str(Round(GVAR(workingMemory) select 2))];
} else {
ctrlSetText [140, Str(Round((GVAR(workingMemory) select 2) * 1.0936133))];
switch (GVAR(currentUnit)) do {
case 0: {
ctrlSetText [140, format["*%1", Round(GVAR(workingMemory) select 2)]];
};
case 1: {
ctrlSetText [140, Str(Round((GVAR(workingMemory) select 2) * 1.0936133))];
};
case 2: {
ctrlSetText [140, Str(Round(GVAR(workingMemory) select 2))];
};
};
[] call FUNC(update_scope_unit);

View File

@ -47,10 +47,15 @@ if (GVAR(currentUnit) != 2) then {
} else {
ctrlSetText [120050, Str(Round(GVAR(workingMemory) select 1))];
};
if (GVAR(currentUnit) == 2) then {
ctrlSetText [120060, Str(Round(GVAR(workingMemory) select 2))];
} else {
if (GVAR(currentUnit) == 1) then {
ctrlSetText [120060, Str(Round((GVAR(workingMemory) select 2) * 1.0936133))];
} else {
ctrlSetText [120060, Str(Round(GVAR(workingMemory) select 2))];
};
if (GVAR(currentUnit) == 0) then {
ctrlSetText [120061, "*"];
} else {
ctrlSetText [120061, ""];
};
if (GVAR(currentUnit) == 2) then {

View File

@ -15,5 +15,10 @@
*/
#include "script_component.hpp"
ctrlSetText [2000, GVAR(scopeUnits) select GVAR(currentScopeUnit)];
ctrlSetText [5000, GVAR(scopeUnits) select GVAR(currentScopeUnit)];
if (GVAR(currentScopeUnit) == 3) then {
ctrlSetText [2000, format["Clicks=%1", GVAR(currentScopeClickNumber)]];
ctrlSetText [5000, format["Clicks=%1", GVAR(currentScopeClickNumber)]];
} else {
ctrlSetText [2000, GVAR(scopeUnits) select GVAR(currentScopeUnit)];
ctrlSetText [5000, GVAR(scopeUnits) select GVAR(currentScopeUnit)];
};

View File

@ -35,8 +35,14 @@ if (GVAR(currentUnit) != 2) then {
} else {
ctrlSetText [330, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)];
};
if (GVAR(currentUnit) == 1) then {
ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget)) * 1.0936133))];
} else {
ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))];
switch (GVAR(currentUnit)) do {
case 0: {
ctrlSetText [340, format["*%1", Round((GVAR(targetRange) select GVAR(currentTarget)))]];
};
case 1: {
ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget)) * 1.0936133))];
};
case 2: {
ctrlSetText [340, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))];
};
};

View File

@ -37,6 +37,11 @@ if (GVAR(currentUnit) == 1) then {
} else {
ctrlSetText [140060, Str(Round((GVAR(targetRange) select GVAR(currentTarget))))];
};
if (GVAR(currentUnit) == 0) then {
ctrlSetText [140061, "*"];
} else {
ctrlSetText [140061, ""];
};
if (GVAR(currentUnit) == 2) then {
ctrlSetText [14002, "Wind Speed (m/s)"];

View File

@ -44,7 +44,7 @@ _barometricPressure = GVAR(barometricPressure);
_relativeHumidity = GVAR(relativeHumidity);
private ["_result"];
_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0] call FUNC(calculate_solution);
_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0, 0] call FUNC(calculate_solution);
GVAR(workingMemory) set [2, _zeroRange];
GVAR(workingMemory) set [3, _scopeBaseAngle + (_result select 0) / 60];

View File

@ -11,4 +11,4 @@
#include "\z\ace\addons\main\script_macros.hpp"
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.0
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.2

View File

@ -20,12 +20,14 @@
<Russian>Открыть ATragMX</Russian>
<Spanish>Abrir ATragMX</Spanish>
<French>Ouvrir ATragMX</French>
<German>ATragMX öffnen</German>
</Key>
<Key ID="STR_ACE_ATragMX_Description">
<English>Rugged PDA with ATragMX</English>
<Polish>Przenośny PDA z kalkulatorem balistycznym ATragMX</Polish>
<Russian>Защищенный КПК с ATragMX</Russian>
<Spanish>PDA rugerizada con ATragMX</Spanish>
<German>Robuster PDA mit ATragMX</German>
</Key>
<Key ID="STR_ACE_ATragMX_ATragMXDialogKey">
<English>Open ATragMX</English>
@ -33,6 +35,7 @@
<Russian>Открыть ATragMX</Russian>
<Spanish>Abrir ATragMX</Spanish>
<French>Ouvrir ATragMX</French>
<German>ATragMX öffnen</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -183,25 +183,25 @@
<English>%1&lt;br/&gt;Attached</English>
<German>%1&lt;br/&gt;befestigt</German>
<Spanish>%1&lt;br/&gt;acoplada</Spanish>
<Polish>%1&lt;br/&gt;Przyczepiono</Polish>
<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>
<Italian>%1&lt;br/&gt;attaccata</Italian>
<Hungarian>%1&lt;br/&gt;hozzácsatolva</Hungarian>
<Russian>%1&lt;br/&gt;присоединена</Russian>
<Russian>%1&lt;br/&gt;присоединен(-а)</Russian>
</Key>
<Key ID="STR_ACE_Attach_Item_Detached">
<English>%1&lt;br/&gt;Detached</English>
<German>%1&lt;br/&gt;entfernt</German>
<Spanish>%1&lt;br/&gt;quitada</Spanish>
<Polish>%1&lt;br/&gt;Odczepiono</Polish>
<Polish>%1&lt;br/&gt;odczepiono</Polish>
<French>%1&lt;br/&gt;détachée</French>
<Czech>%1&lt;br/&gt;Odepnutý</Czech>
<Portuguese>%1&lt;br/&gt;Separada</Portuguese>
<Italian>%1&lt;br/&gt;staccata</Italian>
<Hungarian>%1&lt;br/&gt;lecsatolva</Hungarian>
<Russian>%1&lt;br/&gt;отсоединена</Russian>
<Russian>%1&lt;br/&gt;отсоединен(-а)</Russian>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="Magazines">
<!-- MX -->
@ -13,7 +12,7 @@
<Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian>
<Russian>Магазин из 30-ти 6.5 мм трассирующих под ПНВ</Russian>
<Russian>Магазин из 30-ти 6,5 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English>
@ -25,7 +24,7 @@
<Czech>6.5mm IR-DIM</Czech>
<Portuguese>6,5mm IR-DIM</Portuguese>
<Italian>6.5 IR-DIM</Italian>
<Russian>6.5 мм ИК-трассирующие</Russian>
<Russian>6,5 мм ИК-трассирующие</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimDescription">
<English>Caliber: 6.5x39 mm Tracer IR-DIM&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MX/C/M/SW/3GL</English>
@ -37,7 +36,7 @@
<Czech>Ráže: 6.5x39 mm Svítící IR-DIM&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MX/C/M/SW/3GL</Czech>
<Portuguese>Calibre: 6,5x39 mm Traçante IR-DIM&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: MX/C/M/SW/3GL</Portuguese>
<Italian>Calibro: 6.5x39 mm Traccianti IR-DIM &lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MX/C/M/SW/3GL</Italian>
<Russian>Калибр: 6.5x39 мм трассирующие под ПНВ&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: MX/C/M/SW/3GL</Russian>
<Russian>Калибр: 6,5x39 мм ИК-трассирующие&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MX/C/M/SW/3GL</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDName">
<English>6.5mm 30Rnd SD Mag</English>
@ -49,7 +48,7 @@
<Czech>6.5mm 30ks SD Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd Sil.</Italian>
<Russian>Магазин из 30-ти 6.5 мм дозвуковых</Russian>
<Russian>Магазин из 30-ти 6,5 мм дозвуковых</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDNameShort">
<English>6.5mm SD</English>
@ -61,7 +60,7 @@
<Czech>6.5mm SD</Czech>
<Portuguese>6,5mm SD</Portuguese>
<Italian>6.5mm Sil.</Italian>
<Russian>6.5 мм дозвуковые</Russian>
<Russian>6,5 мм дозвуковые</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_SDDescription">
<English>Caliber: 6.5x39 mm SD&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MX/C/M/SW/3GL</English>
@ -73,7 +72,7 @@
<Czech>Ráže: 6.5x39 mm SD&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MX/C/M/SW/3GL</Czech>
<Portuguese>Calibre: 6,5x39 mm SD&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: MX/C/M/SW/3GL</Portuguese>
<Italian>Calibro: 6.5x39 mm Sil.&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MX/C/M/SW/3GL </Italian>
<Russian>Калибр: 6.5x39 мм дозвуковые&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: MX/C/M/SW/3GL</Russian>
<Russian>Калибр: 6,5x39 мм дозвуковые&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MX/C/M/SW/3GL</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_APName">
<English>6.5mm 30Rnd AP Mag</English>
@ -85,7 +84,7 @@
<Czech>6.5mm 30ks AP Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd AP</Italian>
<Russian>Магазин из 30-ти 6.5 мм бронебойных</Russian>
<Russian>Магазин из 30-ти 6,5 мм бронебойных</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_APNameShort">
<English>6.5mm AP</English>
@ -97,7 +96,7 @@
<Czech>6.5mm AP</Czech>
<Portuguese>6,5mm AP</Portuguese>
<Italian>6.5mm AP</Italian>
<Russian>6.5 мм бронебойные</Russian>
<Russian>6,5 мм бронебойные</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_mag_APDescription">
<English>Caliber: 6.5x39 mm AP&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MX/C/M/SW/3GL</English>
@ -109,7 +108,7 @@
<Czech>Ráže: 6.5x39 mm AP&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: MX/C/M/SW/3GL</Czech>
<Portuguese>Calibre: 6,5x39 mm AP&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: MX/C/M/SW/3GL</Portuguese>
<Italian>Calibro: 6.5x39 mm AP&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: MX/C/M/SW/3GL</Italian>
<Russian>Калибр: 6.5x39 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: MX/C/M/SW/3GL</Russian>
<Russian>Калибр: 6,5x39 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: MX/C/M/SW/3GL</Russian>
</Key>
<!-- KATIBA -->
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimName">
@ -122,7 +121,7 @@
<Czech>6.5mm 30ks Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd Traccianti IR-DIM</Italian>
<Russian>Магазин из 30-ти 6.5 мм трассирующих под ПНВ</Russian>
<Russian>Магазин из 30-ти 6,5 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English>
@ -134,7 +133,7 @@
<Czech>6.5mm IR-DIM</Czech>
<Portuguese>6,5mm IR-DIM</Portuguese>
<Italian>6.5mm IR-DIM</Italian>
<Russian>6.5 мм ИК-трассирующие</Russian>
<Russian>6,5 мм ИК-трассирующие</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimDescription">
<English>Caliber: 6.5x39 mm Tracer IR-DIM&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: Katiba</English>
@ -146,7 +145,7 @@
<Czech>Ráže: 6.5x39 mm Svítící IR-DIM&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: Katiba</Czech>
<Portuguese>Calibre: 6,5x39 mm Traçante IR-DIM&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: Katiba</Portuguese>
<Italian>Calibro: 6.5x39 mm Tracciant IR-DIM&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: Katiba</Italian>
<Russian>Калибр: 6.5x39 мм трассирующие под ПНВ&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: Katiba</Russian>
<Russian>Калибр: 6,5x39 мм ИК-трассирующие&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: Katiba</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDName">
<English>6.5mm 30Rnd SD Mag</English>
@ -158,7 +157,7 @@
<Czech>6.5mm 30ks SD Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis SD de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd Sil.</Italian>
<Russian>Магазин из 30-ти 6.5 мм дозвуковых</Russian>
<Russian>Магазин из 30-ти 6,5 мм дозвуковых</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDNameShort">
<English>6.5mm SD</English>
@ -170,7 +169,7 @@
<Czech>6.5mm SD</Czech>
<Portuguese>6,5mm SD</Portuguese>
<Italian>6.5mm Sil.</Italian>
<Russian>6.5 мм дозвуковые</Russian>
<Russian>6,5 мм дозвуковые</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_SDDescription">
<English>Caliber: 6.5x39 mm SD&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: Katiba</English>
@ -182,7 +181,7 @@
<Czech>Ráže: 6.5x39 mm SD&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: Katiba</Czech>
<Portuguese>Calibre: 6,5x39 mm SD&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: Katiba</Portuguese>
<Italian>Calibro: 6.5x39 mm Sil.&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: Katiba</Italian>
<Russian>Калибр: 6.5x39 мм дозвуковые&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: Katiba</Russian>
<Russian>Калибр: 6,5x39 мм дозвуковые&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: Katiba</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_APName">
<English>6.5mm 30Rnd AP Mag</English>
@ -194,7 +193,7 @@
<Czech>6.5mm 30ks AP Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis AP de 6,5mm</Portuguese>
<Italian>Caricatore 6.5mm 30Rnd AP</Italian>
<Russian>Магазин из 30-ти 6.5 мм бронебойных</Russian>
<Russian>Магазин из 30-ти 6,5 мм бронебойных</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_APNameShort">
<English>6.5mm AP</English>
@ -206,7 +205,7 @@
<Czech>6.5mm AP</Czech>
<Portuguese>6,5mm AP</Portuguese>
<Italian>6.5mm AP</Italian>
<Russian>6.5 мм бронебойные</Russian>
<Russian>6,5 мм бронебойные</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x39_caseless_green_mag_APDescription">
<English>Caliber: 6.5x39 mm AP&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: Katiba</English>
@ -218,7 +217,7 @@
<Czech>Ráže: 6.5x39 mm AP&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: Katiba</Czech>
<Portuguese>Calibre: 6,5x39 mm AP&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: Katiba</Portuguese>
<Italian>Calibro: 6.5x39 mm AP&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: Katiba</Italian>
<Russian>Калибр: 6.5x39 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: Katiba</Russian>
<Russian>Калибр: 6,5x39 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: Katiba</Russian>
</Key>
<!-- 5.56x45mm -->
<Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimName">
@ -231,7 +230,7 @@
<Czech>5.56mm 30ks Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis traçantes IR-DIM de 5,56mm</Portuguese>
<Italian>Caricatore 5.56mm 30rnd Traccianti IR-DIM</Italian>
<Russian>Магазин из 30-ти 5.56 мм трассирующих под ПНВ</Russian>
<Russian>Магазин из 30-ти 5,56 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimNameShort">
<English>5.56mm IR-DIM</English>
@ -243,7 +242,7 @@
<Czech>5.56mm IR-DIM</Czech>
<Portuguese>5,56mm IR-DIM</Portuguese>
<Italian>5.56mm IR-DIM</Italian>
<Russian>5.56 мм ИК-трассирующие</Russian>
<Russian>5,56 мм ИК-трассирующие</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_Tracer_DimDescription">
<English>Caliber: 5.56x45 mm Tracer IR-DIM&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</English>
@ -255,7 +254,7 @@
<Czech>Ráže: 5.56x45 mm Svítící IR-DIM&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech>
<Portuguese>Calibre: 5,56x45 mm Traçante IR-DIM&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese>
<Italian>Calibro: 5.56x45 mm Traccianti IR-DIM&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
<Russian>Калибр: 5.56x45 мм трассирующие под ПНВ&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
<Russian>Калибр: 5,56x45 мм ИК-трассирующие&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_APName">
<English>5.56mm 30Rnd AP Mag</English>
@ -267,7 +266,7 @@
<Czech>5.56mm 30ks AP Zásobník</Czech>
<Portuguese>Carregador de 30 projéteis AP de 5,56mm</Portuguese>
<Italian>Caricatore 5.56mm 30Rnd AP</Italian>
<Russian>Магазин из 30-ти 5.56 мм бронебойных</Russian>
<Russian>Магазин из 30-ти 5,56 мм бронебойных</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_APNameShort">
<English>5.56mm AP</English>
@ -279,7 +278,7 @@
<Czech>5.56mm AP</Czech>
<Portuguese>5,56mm AP</Portuguese>
<Italian>5.56mm AP</Italian>
<Russian>5.56 мм бронебойные</Russian>
<Russian>5,56 мм бронебойные</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_mag_APDescription">
<English>Caliber: 5.56x45 mm AP&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</English>
@ -291,7 +290,7 @@
<Czech>Ráže: 5.56x45 mm AP&lt;br /&gt;Munice: 30&lt;br /&gt;Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech>
<Portuguese>Calibre: 5,56x45 mm AP&lt;br /&gt;Projéteis: 30&lt;br /&gt;Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese>
<Italian>Calibro: 5.56x45 mm AP&lt;br /&gt;Munizioni: 30&lt;br /&gt;In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
<Russian>Калибр: 5.56x45 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Применимы в: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
<Russian>Калибр: 5,56x45 мм бронебойные&lt;br /&gt;Патронов: 30&lt;br /&gt;Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
</Key>
<!-- 7.62x51mm -->
<Key ID="STR_ACE_20Rnd_762x51_mag_TracerName">
@ -304,7 +303,7 @@
<Czech>7.62mm 20ks Svítící Zásobník</Czech>
<Portuguese>Carregador de 20 projéteis traçantes de 7,62mm</Portuguese>
<Italian>Caricatore 7.62mm 20Rnd Traccianti</Italian>
<Russian>Магазин из 20-ти 7.62 мм трассирующих</Russian>
<Russian>Магазин из 20-ти 7,62 мм трассирующих</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_TracerNameShort">
<English>7.62mm Tracer</English>
@ -316,7 +315,7 @@
<Czech>7.62mm Svítící</Czech>
<Portuguese>7,62mm Traçante</Portuguese>
<Italian>7.62mm Traccianti</Italian>
<Russian>7.62 мм трассирущие</Russian>
<Russian>7,62 мм трассирущие</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_TracerDescription">
<English>Caliber: 7.62x51 mm Tracer&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: Mk18 ABR</English>
@ -328,7 +327,7 @@
<Czech>Ráže: 7.62x51 mm Svítící&lt;br /&gt;Munice: 20&lt;br /&gt;Použití: Mk18 ABR</Czech>
<Portuguese>Calibre: 7,62x51 mm Traçante&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese>
<Italian>Calibro: 7.62x51 mm Traccianti&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian>
<Russian>Калибр: 7.62x51 мм трассирующие&lt;br /&gt;Патронов: 20&lt;br /&gt;Применимы в: Mk18 ABR</Russian>
<Russian>Калибр: 7,62x51 мм трассирующие&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimName">
<English>7.62mm 20rnd Tracer IR-DIM Mag</English>
@ -340,7 +339,7 @@
<Czech>7.62mm 20ks Svítící IR-DIM Zásobník</Czech>
<Portuguese>Carregador de 20 projéteis IR-DIM de 7,62mm</Portuguese>
<Italian>Caricatore 7.62mm 20rnd Traccianti IR-DIM</Italian>
<Russian>Магазин из 20-ти 7.62 мм трассирующих под ПНВ</Russian>
<Russian>Магазин из 20-ти 7,62 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimNameShort">
<English>7.62mm IR-DIM</English>
@ -352,7 +351,7 @@
<Czech>7.62mm IR-DIM</Czech>
<Portuguese>7,62mm IR-DIM</Portuguese>
<Italian>7.62mm IR-DIM</Italian>
<Russian>7.62 мм ИК-трассирующие</Russian>
<Russian>7,62 мм ИК-трассирующие</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_Tracer_DimDescription">
<English>Caliber: 7.62x51 mm Tracer IR-DIM&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: Mk18 ABR</English>
@ -364,7 +363,7 @@
<Czech>Ráže: 7.62x51 mm Svítící IR-DIM&lt;br /&gt;Munice: 20&lt;br /&gt;Použití: Mk18 ABR</Czech>
<Portuguese>Calibre: 7,62x51 mm Traçante IR-DIM&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese>
<Italian>Calibro: 7.62x51 mm Traccianti IR-DIM&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian>
<Russian>Калибр: 7.62x51 мм трассирующие под ПНВ&lt;br /&gt;Патронов: 20&lt;br /&gt;Применимы в: Mk18 ABR</Russian>
<Russian>Калибр: 7,62x51 мм ИК-трассирующие&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_SDName">
<English>7.62mm 20Rnd SD Mag</English>
@ -376,7 +375,7 @@
<Czech>7.62mm 20ks SD Zásobník</Czech>
<Portuguese>Carregador de 20 projéteis SD de 7,62mm</Portuguese>
<Italian>Caricatore 7.62mm 20Rnd Sil.</Italian>
<Russian>Магазин из 20-ти 7.62 мм дозвуковых</Russian>
<Russian>Магазин из 20-ти 7,62 мм дозвуковых</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_SDNameShort">
<English>7.62mm SD</English>
@ -388,7 +387,7 @@
<Czech>7.62mm SD</Czech>
<Portuguese>7,62mm SD</Portuguese>
<Italian>7.62mm Sil.</Italian>
<Russian>7.62 мм дозвуковые</Russian>
<Russian>7,62 мм дозвуковые</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_SDDescription">
<English>Caliber: 7.62x51 mm SD&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: Mk18 ABR</English>
@ -400,7 +399,7 @@
<Czech>Ráže: 7.62x51 mm SD&lt;br /&gt;Munice: 20&lt;br /&gt;Použití: Mk18 ABR</Czech>
<Portuguese>Calibre: 7,62x51 mm SD&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese>
<Italian>Calibro: 7.62x51 mm Sil.&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian>
<Russian>Калибр: 7.62x51 мм дозвуковые&lt;br /&gt;Патронов: 20&lt;br /&gt;Применимы в: Mk18 ABR</Russian>
<Russian>Калибр: 7,62x51 мм дозвуковые&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_APName">
<English>7.62mm 20Rnd AP Mag</English>
@ -412,7 +411,7 @@
<Czech>7.62mm 20ks AP Zásobník</Czech>
<Portuguese>Carregador de 20 projéteis AP de 7,62mm</Portuguese>
<Italian>Caricatore 7.62mm 20Rnd AP</Italian>
<Russian>Магазин из 20-ти 7.62 мм бронебойных</Russian>
<Russian>Магазин из 20-ти 7,62 мм бронебойных</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_APNameShort">
<English>7.62mm AP</English>
@ -424,7 +423,7 @@
<Czech>7.62mm AP</Czech>
<Portuguese>7,62mm AP</Portuguese>
<Italian>7.62mm AP</Italian>
<Russian>7.62 мм бронебойные</Russian>
<Russian>7,62 мм бронебойные</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_mag_APDescription">
<English>Caliber: 7.62x51 mm AP&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: Mk18 ABR</English>
@ -436,7 +435,7 @@
<Czech>Ráže: 7.62x51 mm AP&lt;br /&gt;Munice: 20&lt;br /&gt;Použití: Mk18 ABR</Czech>
<Portuguese>Calibre: 7,62x51 mm AP&lt;br /&gt;Projéteis: 20&lt;br /&gt;Usado em: Mk18 ABR</Portuguese>
<Italian>Calibro: 7.62x51 mm AP&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: Mk18 ABR</Italian>
<Russian>Калибр: 7.62x51 мм дозвуковые&lt;br /&gt;Патронов: 20&lt;br /&gt;Применимы в: Mk18 ABR</Russian>
<Russian>Калибр: 7,62x51 мм дозвуковые&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: Mk18 ABR</Russian>
</Key>
<!-- .338 Norma Magnum -->
<Key ID="STR_ACE_130Rnd_338_Mag_TracerName">
@ -445,6 +444,7 @@
<Polish>Taśma .338 NM 130rd Smugacz</Polish>
<French>Bande .338 NM 130Cps Traçante</French>
<Spanish>Cinta de 130 balas trazadoras de .338 NM</Spanish>
<Russian>Лента из 130-ти .338 NM трассирующих</Russian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_TracerNameShort">
<English>.338 NM Tracer</English>
@ -453,6 +453,7 @@
<Czech>.338 NM Svítící</Czech>
<French>.338 NM Traçante</French>
<Spanish>.338 NM trazadora</Spanish>
<Russian>.338 NM трассирующие</Russian>
</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>
@ -460,6 +461,7 @@
<Polish>Kaliber: .338 Norma Magnum Smugacz&lt;br /&gt;Pociski: 130&lt;br /&gt;Używany w: SPMG</Polish>
<French>Calibre: .338 Norma Magnum Traçante&lt;br /&gt;Cartouches: 130&lt;br /&gt;Utilisé dans: SPMG</French>
<Spanish>Calibre: .338 Norma Magnum trazadora&lt;br /&gt;Balas: 130&lt;br /&gt;Se usa en: SPMG</Spanish>
<Russian>Калибр: .338 Norma Magnum трассирующие&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются в: SPMG</Russian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimName">
<English>.338 NM 130Rnd IR-DIM Belt</English>
@ -467,6 +469,7 @@
<Polish>Taśma .338 NM 130rd IR-DIM</Polish>
<French>Bande .338 NM 130Cps IR-DIM</French>
<Spanish>Cinta de 130 balas IR-DIM de .338 NM</Spanish>
<Russian>Лента из 130-ти .338 NM ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort">
<English>.338 NM IR-DIM</English>
@ -475,6 +478,7 @@
<Czech>.338 NM IR-DIM</Czech>
<French>.338 NM IR-DIM</French>
<Spanish>.338 NM IR-DIM</Spanish>
<Russian>.338 NM ИК-трассирующие</Russian>
</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>
@ -482,6 +486,7 @@
<Polish>Kaliber: .338 Norma Magnum Smugacz IR-DIM&lt;br /&gt;Pociski: 130&lt;br /&gt;Używany w: SPMG</Polish>
<French>Calibre: .338 Norma Magnum Traçante IR-DIM&lt;br /&gt;Cartouches: 130&lt;br /&gt;Utilisé dans: SPMG</French>
<Spanish>Calibre: .338 Norma Magnum trazadora IR-DIM&lt;br /&gt;Balas: 130&lt;br /&gt;Se usa en: SPMG</Spanish>
<Russian>Калибр: .338 Norma Magnum ИК-трассирующие&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются с: SPMG</Russian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_APName">
<English>.338 NM 130Rnd AP Belt</English>
@ -489,6 +494,7 @@
<Polish>Taśma .338 NM 130rd AP</Polish>
<French>Bande .338 NM 130Cps AP</French>
<Spanish>Cinta de 130 balas AP de .338 NM</Spanish>
<Russian>Лента из 130-ти .338 NM бронебойных</Russian>
</Key>
<Key ID="STR_ACE_130Rnd_338_Mag_APNameShort">
<English>.338 NM AP</English>
@ -497,6 +503,7 @@
<Czech>.338 NM AP</Czech>
<French>.338 NM AP</French>
<Spanish>.338 NM AP</Spanish>
<Russian>.338 NM бронебойные</Russian>
</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>
@ -504,6 +511,7 @@
<Polish>Kaliber: .338 Norma Magnum AP&lt;br /&gt;Pociski: 130&lt;br /&gt;Używane w: SPMG</Polish>
<French>Calibre: .338 Norma Magnum AP&lt;br /&gt;Cartouches: 130&lt;br /&gt;Utilisé dans: SPMG</French>
<Spanish>Calibre: .338 Norma Magnum AP&lt;br /&gt;Balas: 130&lt;br /&gt;Se usa en: SPMG</Spanish>
<Russian>Калибр: .338 Norma Magnum бронебойные&lt;br /&gt;Патронов: 130&lt;br /&gt;Используются с: SPMG</Russian>
</Key>
<!-- 9.3x64mm 10Rnd -->
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerName">
@ -512,6 +520,7 @@
<Polish>Magazynek 9.3mm 10rd Smugacz</Polish>
<French>Chargeur 9.3mm 10Cps Traçante</French>
<Spanish>Cargador de 10 balas trazadoras de 9.3mm</Spanish>
<Russian>Магазин из 10-ти 9,3 мм трассирующих</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerNameShort">
<English>9.3mm Tracer</English>
@ -520,6 +529,7 @@
<Czech>9.3mm Svítící</Czech>
<French>9.3mm Traçante</French>
<Spanish>9.3mm trazadora</Spanish>
<Russian>9,3 мм трассирующие</Russian>
</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>
@ -527,6 +537,7 @@
<Polish>Kaliber: 9,3x64 mm Smugacz&lt;br /&gt;Pociski: 10&lt;br /&gt;Używany w: Cyrus</Polish>
<French>Calibre: 9.3x64mm Traçante&lt;br /&gt;Cartouches: 10&lt;br /&gt;Utilisé dans: Cyrus</French>
<Spanish>Calibre: 9.3x64mm trazadora&lt;br /&gt;Balas: 10&lt;br /&gt;Se usa en: Cyrus</Spanish>
<Russian>Калибр: 9,3x64 мм трассирующие&lt;br /&gt;Патронов: 10&lt;br /&gt;Используются с: Cyrus</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimName">
<English>9.3mm 10Rnd Tracer IR-DIM Mag</English>
@ -534,6 +545,7 @@
<Polish>Magazynek 9,3mm 10rd Smugacz IR-DIM</Polish>
<French>Chargeur 9.3mm 10Cps Traçante IR-DIM</French>
<Spanish>Cargador de 10 balas trazadoras IR-DIM de 9.3mm</Spanish>
<Russian>Магазин из 10-ти 9,3 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimNameShort">
<English>9.3mm IR-DIM</English>
@ -542,6 +554,7 @@
<Czech>9.3mm IR-DIM</Czech>
<French>9.3mm IR-DIM</French>
<Spanish>9.3mm IR-DIM</Spanish>
<Russian>9,3 мм ИК-трассирующие</Russian>
</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>
@ -549,6 +562,7 @@
<Polish>Kaliber: 9,3x64 mm Smugacz IR-DIM&lt;br /&gt;Pociski: 10&lt;br /&gt;Używany w: Cyrus</Polish>
<French>Calibre: 9.3x64mm Traçante IR-DIM&lt;br /&gt;Cartouches: 10&lt;br /&gt;Utilisé dans: Cyrus</French>
<Spanish>Calibre: 9.3x64mm trazadora IR-DIM&lt;br /&gt;Balas: 10&lt;br /&gt;Se usa en: Cyrus</Spanish>
<Russian>Калибр: 9,3x64 мм ИК-трассирующие&lt;br /&gt;Патронов: 10&lt;br /&gt;Используются с: Cyrus</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APName">
<English>9.3mm 10Rnd AP Mag</English>
@ -556,6 +570,7 @@
<Polish>Magazynek 9,3mm 10rd AP</Polish>
<French>Chargeur 9.3mm 10Cps AP</French>
<Spanish>Cargador de 10 balas AP de 9.3mm</Spanish>
<Russian>Магазин из 10-ти 9,3 мм бронебойных</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APNameShort">
<English>9.3mm AP</English>
@ -564,6 +579,7 @@
<Czech>9.3mm AP</Czech>
<French>9.3mm AP</French>
<Spanish>9.3mm AP</Spanish>
<Russian>9,3 мм бронебойные</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APDescription">
<English>Caliber: 9.3x64mm AP&lt;br /&gt;Rounds: 10&lt;br /&gt;Used in: Cyrus</English>
@ -571,6 +587,7 @@
<Polish>Kaliber: 9,3x64 mm AP&lt;br /&gt;Pociski: 10&lt;br /&gt;Używany w: Cyrus</Polish>
<French>Calibre: 9.3x64mm AP&lt;br /&gt;Cartouches: 10&lt;br /&gt;Utilisé dans: Cyrus</French>
<Spanish>Calibre: 9.3x64mm AP&lt;br /&gt;Balas: 10&lt;br /&gt;Se usa en: Cyrus</Spanish>
<Russian>Калибр: 9,3x64 мм бронебойные&lt;br /&gt;Патронов: 10&lt;br /&gt;Используются с: Cyrus</Russian>
</Key>
<!-- 9.3x64mm 150Rnd Belt-->
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerName">
@ -579,6 +596,7 @@
<Polish>Taśma 9,3mm 150rd Smugacz</Polish>
<French>Bande 9.3mm 150Cps Traçante</French>
<Spanish>Cinta de 150 balas trazadoras de 9.3mm</Spanish>
<Russian>Лента из 150-ти 9,3 мм трассирующих</Russian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerNameShort">
<English>9.3mm Tracer</English>
@ -587,6 +605,7 @@
<Czech>9.3mm Svítící</Czech>
<French>9.3mm Traçante</French>
<Spanish>9.3mm trazadora</Spanish>
<Russian>9,3 мм трассирующие</Russian>
</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>
@ -594,6 +613,7 @@
<Polish>Kaliber: 9,3x64 mm Smugacz&lt;br /&gt;Pociski: 150&lt;br /&gt;Używane w: Navid</Polish>
<French>Calibre: 9.3x64mm Traçante&lt;br /&gt;Cartouches: 150&lt;br /&gt;Utilisé dans: Navid</French>
<Spanish>Calibre: 9.3x64mm trazadora&lt;br /&gt;Balas: 150&lt;br /&gt;Se usa en: Navid</Spanish>
<Russian>Калибр: 9,3x64 мм трассирующие&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimName">
<English>9.3mm 150Rnd Tracer IR-DIM Belt</English>
@ -601,6 +621,7 @@
<Polish>Taśma 9,3mm 150rd Smugacz IR-DIM</Polish>
<French>Bande 9.3mm 150Cps Traçante IR-DIM</French>
<Spanish>Cinta de 150 balas trazadoras IR-DIM de 9.3mm</Spanish>
<Russian>Лента из 150-ти 9,3 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimNameShort">
<English>9.3mm IR-DIM</English>
@ -609,6 +630,7 @@
<Czech>9.3mm IR-DIM</Czech>
<French>9.3mm IR-DIM</French>
<Spanish>9.3mm IR-DIM</Spanish>
<Russian>9,3 мм ИК-трассирующие</Russian>
</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>
@ -616,6 +638,7 @@
<Polish>Kaliber: 9,3x64 mm Smugacz IR-DIM&lt;br /&gt;Pociski: 150&lt;br /&gt;Używane w: Navid</Polish>
<French>Calibre: 9.3x64mm Traçante IR-DIM&lt;br /&gt;Cartouches: 150&lt;br /&gt;Utilisé dans: Navid</French>
<Spanish>Calibre: 9.3x64mm trazadora IR-DIM&lt;br /&gt;Balas: 150&lt;br /&gt;Se usa en: Navid</Spanish>
<Russian>Калибр: 9,3x64 мм ИК-трассирующие&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_APName">
<English>9.3mm 150Rnd AP Belt</English>
@ -623,6 +646,7 @@
<Polish>Taśma 9,3mm 150rd AP</Polish>
<French>Bande 9.3mm 150Cps AP</French>
<Spanish>Cinta de 150 balas AP de 9.3mm</Spanish>
<Russian>Лента из 150-ти 9,3 мм бронебойных</Russian>
</Key>
<Key ID="STR_ACE_150Rnd_93x64_Mag_APNameShort">
<English>9.3mm AP</English>
@ -631,6 +655,7 @@
<Czech>9.3mm AP</Czech>
<French>9.3mm AP</French>
<Spanish>9.3mm AP</Spanish>
<Russian>9,3 мм бронебойные</Russian>
</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>
@ -638,348 +663,406 @@
<Polish>Kaliber: 9,3x64 mm AP&lt;br /&gt;Pociski: 150&lt;br /&gt;Używane w: Navid</Polish>
<French>Calibre: 9.3x64mm AP&lt;br /&gt;Cartouches: 150&lt;br /&gt;Utilisé dans: Navid</French>
<Spanish>Calibre: 9.3x64mm AP&lt;br /&gt;Balas: 150&lt;br /&gt;Se usa en: Navid</Spanish>
<Russian>Калибр: 9,3x64 мм бронебойные&lt;br /&gt;Патронов: 150&lt;br /&gt;Используются с: Навид</Russian>
</Key>
<Key ID="STR_ACE_16Rnd_9x19_mag_Name">
<English>9x19mm 16Rnd Mag</English>
<Polish>Magazynek 9x19mm 16rd</Polish>
<French>Chargeur 9x19mm 16Cps</French>
<Spanish>Cargador de 16 balas de 9x19mm</Spanish>
<Russian>Магазин из 16-ти 9х19 мм</Russian>
</Key>
<Key ID="STR_ACE_16Rnd_9x19_mag_NameShort">
<English>9x19mm</English>
<Polish>9x19mm</Polish>
<French>9x19mm</French>
<Spanish>9x19mm</Spanish>
<Russian>9х19 мм</Russian>
</Key>
<Key ID="STR_ACE_16Rnd_9x19_mag_Description">
<English>9x19mm 30Rnd Mag</English>
<Polish>Magazynek 9x19mm 16rd</Polish>
<French>9x19mm 30Cps</French>
<Spanish>Cargador de 16 balas de 9x19mm</Spanish>
<Russian>Магазин из 16-ти 9х19 мм</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_9x19_mag_Name">
<English>9x19mm 30Rnd Mag</English>
<Polish>Magazynek 9x19mm 30rd</Polish>
<French>9x19mm 30Cps</French>
<Spanish>Cargador de 30 balas de 9x19mm</Spanish>
<Russian>Магазин из 30-ти 9х19 мм</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_9x19_mag_NameShort">
<English>9x19mm</English>
<Polish>9x19mm</Polish>
<French>9x19mm</French>
<Spanish>9x19mm</Spanish>
<Russian>9х19 мм</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_9x19_mag_Description">
<English>9x19mm 30Rnd Mag</English>
<Polish>Magazynek 9x19mm 30rd</Polish>
<French>9x19mm 30Cps</French>
<Spanish>Cargador de 30 balas de 9x19mm</Spanish>
<Russian>Магазин из 30-ти 9х19 мм</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Name">
<English>7.62x54mm 10Rnd Tracer IR-DIM Mag</English>
<Polish>Magazynek 7,62x54 mm 10rd Smugacz IR-DIM</Polish>
<French>Chargeur 7.62x54mm 10Rnd Traçante IR-DIM</French>
<Spanish>Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm</Spanish>
<Russian>Магазин из 10-ти 7,62 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_NameShort">
<English>7.62mm IR-DIM</English>
<Polish>7,62mm IR-DIM</Polish>
<French>7.62mm IR-DIM</French>
<Spanish>7.62mm IR-DIM</Spanish>
<Russian>7,62 мм ИК-трассирующие</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Description">
<English>7.62x54mm 10Rnd Tracer IR-DIM Mag</English>
<Polish>Magazynek 7,62x54 mm 10rd Smugacz IR-DIM</Polish>
<French>Chargeur 7.62x54mm 10Cps Traçante IR-DIM</French>
<Spanish>Cargador de 10 balas trazadoras IR-DIM de 7.62x54mm</Spanish>
<Russian>Магазин из 10-ти 7,62 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimName">
<English>6.5mm 100Rnd Tracer IR-DIM Mag</English>
<Polish>Magazynek 6,5mm 100rd Smugacz IR-DIM</Polish>
<French>Chargeur 6.5mm 100Rnd Traçante IR-DIM</French>
<Spanish>Cargador de 100 balas trazadoras IR-DIM de 6.5mm</Spanish>
<Russian>Магазин из 100 6,5 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English>
<Polish>6,5mm IR-DIM</Polish>
<French>6.5mm IR-DIM</French>
<Spanish>6.5mm IR-DIM</Spanish>
<Russian>6,5 мм ИК-трассирующие</Russian>
</Key>
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimDescription">
<English>6.5mm 100Rnd Tracer IR-DIM Mag</English>
<Polish>Magazynek 6,5mm 100rd Smugacz IR-DIM</Polish>
<French>Chargeur 6.5mm 100Rnd Traçante IR-DIM</French>
<Spanish>Cargador de 100 balas trazadoras IR-DIM de 6.5mm</Spanish>
<Russian>Магазин из 100 6,5 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimName">
<English>6.5mm 200Rnd Tracer IR-DIM Belt</English>
<Polish>Magazynek 6,5mm 200rd Smugacz IR-DIM</Polish>
<French>Bande 6.5mm 200Rnd Traçante IR-DIM</French>
<Spanish>Cinta de 200 balas trazadoras IR-DIM de 6.5mm</Spanish>
<Russian>Магазин из 200-т 6,5 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimNameShort">
<English>6.5mm IR-DIM</English>
<Polish>6,5mm IR-DIM</Polish>
<French>6.5mm IR-DIM</French>
<Spanish>6.5mm IR-DIM</Spanish>
<Russian>6,5 мм ИК-трассирующие</Russian>
</Key>
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimDescription">
<English>6.5mm 200Rnd Tracer IR-DIM Belt</English>
<Polish>Magazynek 6,5mm 200rd Smugacz IR-DIM</Polish>
<French>Bande 6.5mm 200Cps Traçante IR-DIM</French>
<Spanish>Cinta de 200 balas trazadoras IR-DIM de 6.5mm</Spanish>
<Russian>Магазин из 200-т 6,5 мм ИК-трассирующих</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Name">
<English>5.56mm 30Rnd Mag (Mk262)</English>
<Polish>Magazynek 5,56mm 30rd Mk262</Polish>
<French>5.56mm 30Cps (Mk262)</French>
<Spanish>Cargador de 30 balas de 5.56mm (Mk262)</Spanish>
<Russian>Магазин из 30-ти 5.56 мм Mk262</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_NameShort">
<English>5.56mm Mk262</English>
<Polish>5,56mm Mk262</Polish>
<French>5.56mm Mk262</French>
<Spanish>5.56mm (Mk262)</Spanish>
<Russian>5,56 мм Mk262</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Description">
<English>Caliber: 5.56x45 mm NATO (Mk262)&lt;br /&gt;Rounds: 30</English>
<Polish>Kaliber: 5,56x45 mm NATO (Mk262)&lt;br /&gt;Pociski: 30</Polish>
<French>Calibre: 5.56x45 mm NATO (Mk262)&lt;br /&gt;Cartouches: 30</French>
<Spanish>Calibre: 5.56x45 mm NATO (Mk262)&lt;br /&gt;Balas: 30</Spanish>
<Russian>Калибр: 5,56x45 мм NATO (Mk262)&lt;br /&gt;Патронов: 30</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Name">
<English>5.56mm 30Rnd Mag (Mk318)</English>
<Polish>Magazynek 5,56mm 30rd Mk318</Polish>
<French>5.56mm 30Cps (Mk318)</French>
<Spanish>Cargador de 30 balas de 5.56mm (Mk318)</Spanish>
<Russian>Магазин из 30-ти 5.56 мм Mk318</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_NameShort">
<English>5.56mm Mk318</English>
<Polish>5,56mm Mk318</Polish>
<French>5.56mm Mk318</French>
<Spanish>5.56mm (Mk318)</Spanish>
<Russian>5.56 мм Mk318</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Description">
<English>Caliber: 5.56x45 mm NATO (Mk318)&lt;br /&gt;Rounds: 30</English>
<Polish>Kaliber: 5,56x45 mm NATO (Mk318)&lt;br /&gt;Pociski: 30</Polish>
<French>Calibre: 5.56x45 mm NATO (Mk318)&lt;br /&gt;Cartouches: 30</French>
<Spanish>Calibre: 5.56x45 mm NATO (Mk318)&lt;br /&gt;Balas: 30</Spanish>
<Russian>Калибр: 5,56x45 мм NATO (Mk318)&lt;br /&gt;Патронов: 30</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Name">
<English>7.62mm 10Rnd Mag (M118LR)</English>
<Polish>Magazynek 7,62mm 10rd (M118LR)</Polish>
<French>7.62mm 10Cps (M118LR)</French>
<Spanish>Cargador de 10 balas de 7.62mm (M118LR)</Spanish>
<Russian>Магазин из 10-ти 7,62 мм (M118LR)</Russian>
</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>
<Russian>7,62 мм M118LR</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Description">
<English>Caliber: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Rounds: 10</English>
<Polish>Kaliber: 7,62x51 mm NATO (M118LR)&lt;br /&gt;Pociski: 10</Polish>
<French>Calibre: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Cartouches: 10</French>
<Spanish>Calibre: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Balas: 10</Spanish>
<Russian>Калибр: 7,62x51 мм NATO (M118LR)&lt;br /&gt;Патронов: 10</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Name">
<English>7.62mm 20Rnd Mag (M118LR)</English>
<Polish>Magazynek 7,62mm 20rd (M118LR)</Polish>
<French>7.62mm 20Cps (M118LR)</French>
<Spanish>Cargador de 20 balas de 7.62mm (M118LR)</Spanish>
<Russian>Магазин из 20-ти 7,62 мм (M118LR)</Russian>
</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>
<Russian>7,62 мм M118LR</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_M118LR_Mag_Description">
<English>Caliber: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Rounds: 20</English>
<Polish>Kaliber: 7,62x51 mm NATO (M118LR)&lt;br /&gt;Pociski: 20</Polish>
<French>Calibre: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Cartouches: 20</French>
<Spanish>Calibre: 7.62x51 mm NATO (M118LR)&lt;br /&gt;Balas: 20</Spanish>
<Russian>Калибр: 7,62x51 мм NATO (M118LR)&lt;br /&gt;Патронов: 20</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Name">
<English>7.62mm 10Rnd Mag (Mk319 Mod 0)</English>
<Polish>Magazynek 7,62mm 10rd (Mk319 Mod 0)</Polish>
<French>7.62mm 10Cps (Mk319 Mod 0)</French>
<Spanish>Cargador de 10 balas de 7.62mm (Mk319 Mod 0)</Spanish>
<Russian>Магазин из 10-ти 7,62 мм (Mk319 Mod 0)</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_NameShort">
<English>7.62mm Mk319</English>
<Polish>7,62mm Mk319</Polish>
<French>7.62mm Mk319</French>
<Spanish>7.62mm Mk319</Spanish>
<Russian>7,62mm Mk319</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Description">
<English>Caliber: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Rounds: 10</English>
<Polish>Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Pociski: 10</Polish>
<French>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Cartouches: 10</French>
<Spanish>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Balas: 10</Spanish>
<Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)&lt;br /&gt;Патронов: 10</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Name">
<English>7.62mm 20Rnd Mag (Mk319 Mod 0)</English>
<Polish>Magazynek 7,62mm 20rd (Mk319 Mod 0)</Polish>
<French>7.62mm 20Cps (Mk319 Mod 0)</French>
<Spanish>Cargador de 20 balas de 7.62mm (Mk319 Mod 0)</Spanish>
<Russian>Магазин из 20-ти 7,62 мм (Mk319 Mod 0)</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_NameShort">
<English>7.62mm Mk319</English>
<Polish>7,62mm Mk319</Polish>
<French>7.62mm Mk319</French>
<Spanish>7.62mm Mk319</Spanish>
<Russian>7,62 мм Mk319</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Description">
<English>Caliber: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Rounds: 20</English>
<Polish>Kaliber: 7,62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Pociski: 20</Polish>
<French>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Cartouches: 20</French>
<Spanish>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)&lt;br /&gt;Balas: 20</Spanish>
<Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)&lt;br /&gt;Патронов: 20</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Name">
<English>7.62mm 20Rnd Mag (Mk248 Mod 0)</English>
<Polish>Magazynek 7,62mm 20rd (Mk248 Mod 0)</Polish>
<French>7.62mm 20Cps (Mk248 Mod 0)</French>
<Spanish>Cargador de 20 balas de 7.62mm (Mk248 Mod 0)</Spanish>
<Russian>Магазин из 20-ти 7,62 мм (Mk248 Mod 0)</Russian>
</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>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Description">
<English>Caliber: 7.62x67 mm NATO (Mk248 Mod 0)&lt;br /&gt;Rounds: 20</English>
<Polish>Kaliber: 7,62x67 mm NATO (Mk248 Mod 0)&lt;br /&gt;Pociski: 20</Polish>
<French>Calibre: 7.62x67mm NATO (Mk248 Mod 0)&lt;br /&gt;Cartouches: 20</French>
<Spanish>Calibre: 7.62x67 mm NATO (Mk248 Mod 0)&lt;br /&gt;Balas: 20</Spanish>
<Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 0)&lt;br /&gt;Патронов: 20</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Name">
<English>7.62mm 20Rnd Mag (Mk248 Mod 1)</English>
<Polish>Magazynek 7,62mm 20rd (Mk248 Mod 1)</Polish>
<French>7.62mm 20Cps (Mk248 Mod 1)</French>
<Spanish>Cargador de 20 balas de 7.62mm (Mk248 Mod 1)</Spanish>
<Russian>Магазин из 20-ти 7,62 мм (Mk248 Mod 1)</Russian>
</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>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Description">
<English>Caliber: 7.62x67 mm NATO (Mk248 Mod 1)&lt;br /&gt;Rounds: 20</English>
<Polish>Kaliber: 7,62x67 mm NATO (Mk248 Mod 1)&lt;br /&gt;Pociski: 20</Polish>
<French>Calibre: 7.62x67mm NATO (Mk248 Mod 1)&lt;br /&gt;Cartouches: 20</French>
<Spanish>Calibre: 7.62x67 mm NATO (Mk248 Mod 1)&lt;br /&gt;Balas: 20</Spanish>
<Russian>Калибр: 7,62x67 мм NATO (Mk248 Mod 1)&lt;br /&gt;Патронов: 20</Russian>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Name">
<English>7.62mm 20Rnd Mag (Berger Hybrid OTM)</English>
<Polish>Magazynek 7,62mm 20rd (Berger Hybrid OTM)</Polish>
<French>7.62 20Cps (Berger Hybrid OTM)</French>
<Spanish>Cargador de 20 balas de 7.62mm (Berger Hybrid OTM)</Spanish>
<Russian>Магазин из 20-ти 7,62 мм (Berger Hybrid OTM)</Russian>
</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>
</Key>
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Description">
<English>Caliber: 7.62x67 mm NATO (Berger Hybrid OTM)&lt;br /&gt;Rounds: 20</English>
<Polish>Kaliber: 7,62x67 mm NATO (Berger Hybrid OTM)&lt;br /&gt;Pociski: 20</Polish>
<French>Calibre: 7.62x67mm NATO (Berger Hybrid OTM)&lt;br /&gt;Cartouches: 20</French>
<Spanish>Calibre: 7.62x67 mm NATO (Berger Hybrid OTM)&lt;br /&gt;Balas: 20</Spanish>
<Russian>Калибр: 7,62x67 мм NATO (Berger Hybrid OTM)&lt;br /&gt;Патронов: 20</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Name">
<English>6.5x47mm 30Rnd Mag (HPBT Scenar)</English>
<French>6.5x47mm 30Cps (HPBT Scenar)</French>
<Spanish>Cargador de 30 balas de 6.5x47mm (HPBT Scenar)</Spanish>
<Polish>Magazynek 6,5x47 mm 30rd (HPBT Scenar)</Polish>
<Russian>Магазин из 30-ти 6,5x47 мм (HPBT Scenar)</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_NameShort">
<English>6.5mm Scenar</English>
<French>6.5mm Scenar</French>
<Spanish>6.5mm Scenar</Spanish>
<Polish>6,5mm Scenar</Polish>
<Russian>6,5 мм Scenar</Russian>
</Key>
<Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Description">
<English>Caliber: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Rounds: 30</English>
<French>Calibre: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Cartouches: 30</French>
<Spanish>Calibre: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Balas: 30</Spanish>
<Polish>Kaliber: 6,5x47 mm (HPBT Scenar)&lt;br /&gt;Pociski: 30</Polish>
<Russian>Калибр: 6,5x47 мм (HPBT Scenar)&lt;br /&gt;Патронов: 30</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_Name">
<English>.338 10Rnd Mag (300gr Sierra MatchKing HPBT)</English>
<French>.338 10 Cps (300gr Sierra MatchKing HPBT)</French>
<Spanish>Cargador de 10 balas de 8.6x70mm (300gr Sierra MatchKing HPBT)</Spanish>
<Polish>Magazynek .338 10rd (300gr Sierra MatchKing HPBT)</Polish>
<Russian>Магазин из 10-ти .338 (300 гран Sierra MatchKing HPBT)</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_338_300gr_HPBT_Mag_NameShort">
<English>.338 (HPBT)</English>
<French>.338 (HPBT)</French>
<Spanish>.338 (HPBT)</Spanish>
<Polish>.338 (HPBT)</Polish>
<Russian>.338 (HPBT)</Russian>
</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>
<French>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Cartouches: 10</French>
<Spanish>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Balas: 10</Spanish>
<Polish>Kaliber: 8,6x70 mm (300gr Sierra MatchKing HPBT)&lt;br /&gt;Pociski: 10</Polish>
<Russian>Калибр: .338 (300 гран Sierra MatchKing HPBT)&lt;br /&gt;Патронов: 10</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_338_API526_Mag_Name">
<English>.338 10Rnd Mag (API526)</English>
<French>.338 10Cps (API526)</French>
<Spanish>Cargador de 10 balas de .338 (API526)</Spanish>
<Polish>Magazynek .338 10rd (API526)</Polish>
<Russian>Магазин из 10-ти .338 (API526)</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_338_API526_Mag_NameShort">
<English>.338 AP</English>
<French>.338 AP</French>
<Spanish>.338 AP</Spanish>
<Polish>.338 AP</Polish>
<Russian>.338 бронебойные</Russian>
</Key>
<Key ID="STR_ACE_10Rnd_338_API526_Mag_Description">
<English>Caliber: 8.6x70mm (API526)&lt;br /&gt;Rounds: 10</English>
<French>Calibre: 8.6x70mm (API526)&lt;br /&gt;Cartouches: 10</French>
<Spanish>Calibre: 8.6x70mm (API526)&lt;br /&gt;Balas: 10</Spanish>
<Polish>Kaliber: 8,6x70 mm (API526)&lt;br /&gt;Pociski: 10</Polish>
<Russian>Калибр: .338 (API526)&lt;br /&gt;Патронов: 10</Russian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_Mag_Name">
<English>12.7x99mm 5Rnd Mag</English>
<French>12.7x99mm 5Cps</French>
<Spanish>Cargador de 5 balas de 12.7x99mm</Spanish>
<Polish>Magazynek 12,7x99 mm 5rd</Polish>
<Russian>Магазин из 5-ти 12,7x99 мм</Russian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_Mag_NameShort">
<English>12.7mm</English>
<French>12.7mm</French>
<Spanish>12.7mm</Spanish>
<Polish>12,7mm</Polish>
<Russian>12,7 мм</Russian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_Mag_Description">
<English>Caliber: 12.7x99mm&lt;br /&gt;Rounds: 5</English>
<French>Calibre: 12.7x99mm&lt;br /&gt;Cartouches: 5</French>
<Spanish>Calibre: 12.7x99mm&lt;br /&gt;Balas: 5</Spanish>
<Polish>Kaliber: 12,7x99 mm&lt;br /&gt;Pociski: 5</Polish>
<Russian>Калибр: 12,7x99 мм&lt;br /&gt;Патронов: 5</Russian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Name">
<English>12.7x99mm 5Rnd Mag (AMAX)</English>
<French>12.7x99mm 5Rnd Mag (AMAX)</French>
<Spanish>Cargador de 5 balas de 12.7x99mm (AMAX)</Spanish>
<Polish>Magazynek 12,7x99 mm 5rd (AMAX)</Polish>
<Russian>Магазин из 5-ти 12,7x99 мм (A-MAX)</Russian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_NameShort">
<English>12.7mm</English>
<French>12.7mm</French>
<Spanish>12.7mm</Spanish>
<Polish>12,7mm</Polish>
<Russian>12,7 мм</Russian>
</Key>
<Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Description">
<English>Caliber: 12.7x99mm (AMAX)&lt;br /&gt;Rounds: 5</English>
<French>Calibre: 12.7x99mm (AMAX)&lt;br /&gt;Cartouches: 5</French>
<Spanish>Calibre: 12.7x99mm (AMAX)&lt;br /&gt;Balas: 5</Spanish>
<Polish>Kaliber: 12,7x99 mm (AMAX)&lt;br /&gt;Pociski: 5</Polish>
<Russian>Калибр: 12,7x99 мм (A-MAX)&lt;br /&gt;Патронов: 5</Russian>
</Key>
</Package>
</Project>
</Project>

View File

@ -6,7 +6,7 @@
<German>Gefangen nehmen</German>
<Spanish>Tomar prisionero</Spanish>
<French>Capturer le prisonnier</French>
<Polish>Weź więźnia</Polish>
<Polish>Aresztuj</Polish>
<Czech>Zajmout Osobu</Czech>
<Italian>Arresta il Prigioniero</Italian>
<Portuguese>Tomar Prisioneiro</Portuguese>
@ -53,7 +53,7 @@
<English>You need to take him as prisoner first!</English>
<German>Du musst ihn zuerst gefangen nehmen.</German>
<Spanish>Necesitas hacerle prisionero primero!</Spanish>
<Polish>Najpierw musisz wziąć go jako więźnia!</Polish>
<Polish>Najpierw musisz go aresztować!</Polish>
<French>Vous devez d'abord le capturer!</French>
<Czech>Musíš ho nejdříve zajmout!</Czech>
<Italian>Prima devi arrestarlo!</Italian>
@ -188,4 +188,4 @@
<Italian>Niente selezionato</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -4,6 +4,7 @@
// Load settings from profile
if (hasInterface) then {
call FUNC(loadSettingsFromProfile);
call FUNC(loadSettingsLocalizedText);
};
// Listens for global "SettingChanged" events, to update the force status locally
@ -195,6 +196,31 @@ GVAR(OldPlayerWeapon) = currentWeapon ACE_player;
}, 0, []] call cba_fnc_addPerFrameHandler;
// PFH to raise camera created event. Only works on these cams by BI.
#define ALL_CAMERAS [ \
missionNamespace getVariable ["BIS_DEBUG_CAM", objNull], \
missionNamespace getVariable ["BIS_fnc_camera_cam", objNull], \
uiNamespace getVariable ["BIS_fnc_arsenal_cam", objNull], \
uiNamespace getVariable ["BIS_fnc_animViewer_cam", objNull], \
missionNamespace getVariable ["BIS_fnc_establishingShot_fakeUAV", objNull] \
]
GVAR(OldIsCamera) = false;
[{
// "activeCameraChanged" event
_isCamera = {!isNull _x} count ALL_CAMERAS > 0;
if !(_isCamera isEqualTo GVAR(OldIsCamera)) then {
// Raise ACE event locally
GVAR(OldIsCamera) = _isCamera;
["activeCameraChanged", [ACE_player, _isCamera]] call FUNC(localEvent);
};
}, 1, []] call cba_fnc_addPerFrameHandler; // feel free to decrease the sleep time if you need it.
[QGVAR(StateArrested),false,true,QUOTE(ADDON)] call FUNC(defineVariable);
["displayTextStructured", FUNC(displayTextStructured)] call FUNC(addEventhandler);
@ -222,5 +248,13 @@ 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

@ -42,6 +42,7 @@ PREP(doAnimation);
PREP(dropBackpack);
PREP(endRadioTransmission);
PREP(eraseCache);
PREP(errorMessage);
PREP(execNextFrame);
PREP(execPersistentFnc);
PREP(execRemoteFnc);
@ -119,6 +120,7 @@ PREP(loadPerson);
PREP(loadPersonLocal);
PREP(loadSettingsFromProfile);
PREP(loadSettingsOnServer);
PREP(loadSettingsLocalizedText);
PREP(map);
PREP(moduleCheckPBOs);
PREP(moduleLSDVehicles);

View File

@ -152,3 +152,15 @@ class CfgUIGrids {
};
};
};
/*
// check dll
class RscStandardDisplay;
class RscDisplayMain: RscStandardDisplay {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscDisplayMain"",'GUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); [ARR_5('header','tail',{0},{},_this select 0)] call COMPILE_FILE(functions\fnc_errorMessage));
};
*/
class ACE_Extensions {
extensions[] = {};
};

View File

@ -0,0 +1,144 @@
/*
* Author: commy2, based on BIS_fnc_errorMsg and BIS_fnc_guiMessage by Karel Moricky (BI)
* Stops simulation and opens a textbox with error message.
*
* Arguments:
* ?
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
disableSerialization;
endLoadingScreen;
private ["_textHeader", "_textMessage", "_onOK", "_onCancel"];
_textHeader = _this select 0;
_textMessage = _this select 1;
_onOK = ARR_SELECT(_this,2,{});
_onCancel = ARR_SELECT(_this,3,{});
if (typeName _textMessage == "STRING") then {
_textMessage = parseText _textMessage;
};
(ARR_SELECT(_this,4,call BIS_fnc_displayMission)) createDisplay "RscDisplayCommonMessagePause";
private ["_display", "_ctrlRscMessageBox", "_ctrlBcgCommonTop", "_ctrlBcgCommon", "_ctrlText", "_ctrlBackgroundButtonOK", "_ctrlBackgroundButtonMiddle", "_ctrlBackgroundButtonCancel", "_ctrlButtonOK", "_ctrlButtonCancel"];
_display = uiNamespace getVariable "RscDisplayCommonMessage_display";
_ctrlRscMessageBox = _display displayCtrl 2351;
_ctrlBcgCommonTop = _display displayCtrl 235100;
_ctrlBcgCommon = _display displayCtrl 235101;
_ctrlText = _display displayCtrl 235102;
_ctrlBackgroundButtonOK = _display displayCtrl 235103;
_ctrlBackgroundButtonMiddle = _display displayCtrl 235104;
_ctrlBackgroundButtonCancel = _display displayCtrl 235105;
_ctrlButtonOK = _display displayCtrl 235106;
_ctrlButtonCancel = _display displayCtrl 235107;
_ctrlBcgCommonTop ctrlSetText _textHeader;
private ["_ctrlButtonOKPos", "_ctrlBcgCommonPos", "_bottomSpaceY", "_ctrlTextPos", "_marginX", "_marginY"];
_ctrlButtonOKPos = ctrlPosition _ctrlButtonOK;
_ctrlBcgCommonPos = ctrlPosition _ctrlBcgCommon;
_bottomSpaceY = (_ctrlButtonOKPos select 1) - ((_ctrlBcgCommonPos select 1) + (_ctrlBcgCommonPos select 3));
_ctrlTextPos = ctrlPosition _ctrlText;
_marginX = (_ctrlTextPos select 0) - (_ctrlBcgCommonPos select 0);
_marginY = (_ctrlTextPos select 1) - (_ctrlBcgCommonPos select 1);
private ["_ctrlTextPosH", "_bottomPosY"];
_ctrlText ctrlSetStructuredText _textMessage;
_ctrlTextPosH = ctrlTextHeight _ctrlText;
_ctrlBcgCommon ctrlSetPosition [
_ctrlBcgCommonPos select 0,
_ctrlBcgCommonPos select 1,
_ctrlBcgCommonPos select 2,
_ctrlTextPosH + _marginY * 2
];
_ctrlBcgCommon ctrlCommit 0;
_ctrlText ctrlSetPosition [
(_ctrlBcgCommonPos select 0) + _marginX,
(_ctrlBcgCommonPos select 1) + _marginY,
(_ctrlBcgCommonPos select 2) - _marginX * 2,
_ctrlTextPosH
];
_ctrlText ctrlCommit 0;
_bottomPosY = (_ctrlBcgCommonPos select 1) + _ctrlTextPosH + (_marginY * 2) + _bottomSpaceY;
{
private "_xPos";
_xPos = ctrlPosition _x;
_xPos set [1, _bottomPosY];
_x ctrlSetPosition _xPos;
_x ctrlCommit 0;
} foreach [
_ctrlBackgroundButtonOK,
_ctrlBackgroundButtonMiddle,
_ctrlBackgroundButtonCancel,
_ctrlButtonOK,
_ctrlButtonCancel
];
private ["_ctrlRscMessageBoxPos", "_ctrlRscMessageBoxPosH"];
_ctrlRscMessageBoxPos = ctrlPosition _ctrlRscMessageBox;
_ctrlRscMessageBoxPosH = _bottomPosY + (_ctrlButtonOKPos select 3);
_ctrlRscMessageBox ctrlSetPosition [
0.5 - (_ctrlBcgCommonPos select 2) / 2,
0.5 - _ctrlRscMessageBoxPosH / 2,
(_ctrlBcgCommonPos select 2) + 0.5,
_ctrlRscMessageBoxPosH
];
_ctrlRscMessageBox ctrlEnable true;
_ctrlRscMessageBox ctrlCommit 0;
if (_onOK isEqualTo {}) then {
_ctrlButtonOK ctrlEnable false;
_ctrlButtonOK ctrlSetFade 0;
_ctrlButtonOK ctrlSetText "";
_ctrlButtonOK ctrlCommit 0;
} else {
_ctrlButtonOK ctrlEnable true;
_ctrlButtonOK ctrlSetFade 0;
_ctrlButtonOK ctrlSetText localize "STR_DISP_OK";
_ctrlButtonOK ctrlCommit 0;
ctrlSetFocus _ctrlButtonOK;
};
if (_onCancel isEqualTo {}) then {
_ctrlButtonCancel ctrlEnable false;
_ctrlButtonCancel ctrlSetFade 0;
_ctrlButtonCancel ctrlSetText "";
_ctrlButtonCancel ctrlCommit 0;
} else {
_ctrlButtonCancel ctrlEnable true;
_ctrlButtonCancel ctrlSetFade 0;
_ctrlButtonCancel ctrlSetText localize "STR_DISP_CANCEL";
_ctrlButtonCancel ctrlCommit 0;
ctrlSetFocus _ctrlButtonCancel;
};
_ctrlButtonOK ctrlAddEventHandler ["buttonClick", {(ctrlParent (_this select 0)) closeDisplay 1; true}];
_ctrlButtonCancel ctrlAddEventHandler ["buttonClick", {(ctrlParent (_this select 0)) closeDisplay 2; true}];
GVAR(errorOnOK) = _onOK;
GVAR(errorOnCancel) = _onCancel;
_display displayAddEventHandler ["unload", {call ([{}, GVAR(errorOnOK), GVAR(errorOnCancel)] select (_this select 1))}];
_display displayAddEventHandler ["keyDown", {_this select 1 == 1}];

View File

@ -13,6 +13,8 @@
*/
#include "script_component.hpp"
private ["_name", "_isClientSetable", "_isForced", "_profileValue"];
// Iterate through settings
{
_name = _x select 0;
@ -34,4 +36,5 @@
};
};
};
} forEach GVAR(settings);

View File

@ -0,0 +1,48 @@
/*
* Author: Glowbal
* Parse all settings and load the localized displayName and description for all text
*
* Arguments:
* None
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
private ["_parseConfigForDisplayNames", "_name"];
_parseConfigForDisplayNames = {
private "_optionEntry";
_optionEntry = _this select 0;
if !(isClass _optionEntry) exitwith {false};
_x set [3, getText (_optionEntry >> "displayName")];
_x set [4, getText (_optionEntry >> "description")];
private "_values";
_values = _x select 5;
{
private "_text";
_text = _x;
if (((typeName _text) == "STRING") && {(count _text) > 1} && {(_text select [0,1]) == "$"}) then {
_text = localize (_text select [1, ((count _text) - 1)]); //chop off the leading $
_values set [_forEachIndex, _text];
};
} forEach _values;
true;
};
// Iterate through settings
{
_name = _x select 0;
if !([configFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames) then {
if !([configFile >> "ACE_ServerSettings" >> _name] call _parseConfigForDisplayNames) then {
[missionConfigFile >> "ACE_Settings" >> _name] call _parseConfigForDisplayNames;
};
};
} forEach GVAR(settings);

View File

@ -75,9 +75,9 @@ if (isNil _name) then {
getNumber (_optionEntry >> "force") > 0,
_value
];
//Strings in the values array won't be localized from the config, so just do that now:
private "_values";
/*private "_values";
_values = _settingData select 5;
{
_text = _x;
@ -85,8 +85,8 @@ if (isNil _name) then {
_text = localize (_text select [1, ((count _text) - 1)]); //chop off the leading $
_values set [_forEachIndex, _text];
};
} forEach _values;
} forEach _values;*/
GVAR(settings) pushBack _settingData;

View File

@ -11,4 +11,4 @@
#define DEBUG_SETTINGS DEBUG_SETTINGS_COMMON
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#include "\z\ace\addons\main\script_macros.hpp"

View File

@ -0,0 +1,10 @@
// by commy2
// The Arma InventoryOpened EH fires actually before the inventory dialog is opened (findDisplay 602 => displayNull).
#include "script_component.hpp"
["inventoryDisplayLoaded",{
[ACE_player] call FUNC(takeLoadedATWeapon);
[ACE_player, (_this select 0)] call FUNC(updateInventoryDisplay);
}] call EFUNC(common,addEventHandler);

View File

@ -26,14 +26,14 @@
<Hungarian>Elengedés</Hungarian>
</Key>
<Key ID="STR_ACE_Dragging_UnableToDrag">
<English>Item to heavy</English>
<English>Item too heavy</English>
<German>Gegenstand ist zu schwer</German>
<Spanish>Articulo demasiado pesado</Spanish>
<Polish>Przedmiot zbyt ciężki</Polish>
<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>
<Russian>Слишком тяжело</Russian>
<Russian>Предмет слишком тяжёлый</Russian>
<Czech>Moc težké</Czech>
<Hungarian>Az objektum túl nehéz</Hungarian>
</Key>

View File

@ -203,7 +203,7 @@
<Italian>Consente la disattivazione degli ordigni esplosivi</Italian>
<Hungarian>Robbanóanyagok hatástalanítását teszi lehetővé</Hungarian>
<Portuguese>Permite o desarme de explosivos</Portuguese>
<Russian>Позволяет обезвреживать ВУ</Russian>
<Russian>Позволяет обезвреживать взрывчатку</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Phone_AddToSpeedDial">
<English>Add to Speed Dial</English>
@ -215,7 +215,7 @@
<Italian>Aggiungi alla selezione rapida</Italian>
<Hungarian>Hozzáadás a gyorstárcsázóhoz</Hungarian>
<Portuguese>Adicionar à ligação rápida</Portuguese>
<Russian>Добавить в ускоренный набор</Russian>
<Russian>Добавить в быстрый вызов</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Clear">
<English>Clear</English>
@ -233,7 +233,7 @@
<English>Dial</English>
<German>Wählen</German>
<Spanish>Marcar</Spanish>
<Polish>Wybierz mumer</Polish>
<Polish>Wybierz numer</Polish>
<French>Composer</French>
<Czech>Vytočit</Czech>
<Italian>Composizione numero</Italian>
@ -281,7 +281,7 @@
<English>Detonate Menu</English>
<German>"Zünden"-Menü</German>
<Spanish>Menú de detonación</Spanish>
<Polish>Menu detonowania</Polish>
<Polish>Menu detonacji</Polish>
<French>Menu de mise à feu</French>
<Czech>Menu Detonace</Czech>
<Italian>Menù di detonazione</Italian>
@ -299,7 +299,7 @@
<Italian>Menù di collocamento</Italian>
<Hungarian>Elhelyezési menü</Hungarian>
<Portuguese>Menu de posicionamento</Portuguese>
<Russian>Меню детонации</Russian>
<Russian>Меню установки</Russian>
</Key>
<Key ID="STR_ACE_Explosives_Defuse">
<English>Defuse</English>
@ -395,7 +395,7 @@
<Italian>Piastra a Pressione</Italian>
<Hungarian>Nyomólap</Hungarian>
<Portuguese>Placa de pressão</Portuguese>
<Russian>Давление</Russian>
<Russian>Нажимная плита</Russian>
</Key>
<Key ID="STR_ACE_Explosives_TripWire">
<English>Tripwire</English>
@ -443,7 +443,7 @@
<Italian>Sensore IR (Attacco laterale)</Italian>
<Hungarian>Infravörös szenzor (Side Attack)</Hungarian>
<Portuguese>Sensor infravermelho (ataque lateral)</Portuguese>
<Russian>ИК (детонация вбок)</Russian>
<Russian>ИК сенсор (детонация вбок)</Russian>
</Key>
<Key ID="STR_ACE_Explosives_SLAME_Magnetic">
<English>Magnetic Influence Sensor (Bottom Attack)</English>
@ -455,7 +455,7 @@
<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>
<Russian>Магнитный сенсор (детонация вверх)</Russian>
</Key>
<Key ID="STR_ACE_Explosives_NoExplosivesAvailable">
<English>No explosives on trigger.</English>
@ -467,7 +467,7 @@
<Hungarian>Nincs robbanóanyag a gyújtóeszközhöz kötve.</Hungarian>
<Polish>Brak ładunków na zapalnik.</Polish>
<Portuguese>Nenhum explosivo no gatilho.</Portuguese>
<Russian>Нет доступных ВУ для взрывателя.</Russian>
<Russian>Взрыватель не подсоединён к взрывчатке</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DeadManSwitch_displayName">
<English>Dead Man's Switch</English>
@ -477,14 +477,14 @@
<Polish>Czuwak</Polish>
<Spanish>Detonador de hombre muerto</Spanish>
<Hungarian>Dead Man's Switch</Hungarian>
<Russian>Ловушка мертвеца</Russian>
<Russian>Кнопка мертвеца</Russian>
</Key>
<Key ID="STR_ACE_Explosives_DeadManSwitch_description">
<English>Used to remotely trigger explosives when released.</English>
<German>Zündet Sprengladungen wenn losgelassen.</German>
<French>Déclenche la mise à feu d'un explosif lorsqu'il est libéré.</French>
<Czech>Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny</Czech>
<Polish>Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity.</Polish>
<Polish>Używany w celu zdalnej detonacji ładunków, kiedy jego operator zostanie zabity.</Polish>
<Spanish>Utilizado para detonar explosivos remotamente al soltarlo.</Spanish>
<Hungarian>Robbanóanyagok távoli robbantásához való, elengedéskor gyújt.</Hungarian>
<Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian>
@ -502,4 +502,4 @@
<Italian>Raccogli</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -20,3 +20,7 @@ class CfgPatches {
#include "CfgWeapons.hpp"
#include "CfgOptics.hpp"
class ACE_Extensions {
extensions[] += {"ace_fcs"};
};

View File

@ -31,7 +31,7 @@
<Spanish>Poner tapones</Spanish>
<Polish>Włóż stopery</Polish>
<Czech>Dát špunty do uší</Czech>
<Russian>Беруши надеты</Russian>
<Russian>Надеть беруши</Russian>
<French>Bouchons mis</French>
<Hungarian>Füldugó berakva</Hungarian>
<Portuguese>Protetores colocados</Portuguese>
@ -43,7 +43,7 @@
<Spanish>Quitar tapones</Spanish>
<Polish>Wyjmij stopery</Polish>
<Czech>Vyndat špunty z uší</Czech>
<Russian>Беруши сняты</Russian>
<Russian>Снять беруши</Russian>
<French>Bouchons enlevés</French>
<Hungarian>Füldugó kivéve</Hungarian>
<Portuguese>Protetores retirados</Portuguese>
@ -109,4 +109,4 @@
<Italian>Disabilita il ronzio</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -49,4 +49,7 @@ GVAR(expandedTime) = diag_tickTime;
GVAR(iconCtrls) = [];
GVAR(iconCount) = 0;
GVAR(foundActions) = [];
GVAR(lastTimeSearchedActions) = -1000;
ADDON = true;

View File

@ -23,6 +23,12 @@ class ACE_Settings {
isClientSettable = 1;
displayName = "$STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction";
};
class GVAR(AlwaysUseCursorInteraction) {
value = 0;
typeName = "BOOL";
isClientSettable = 1;
displayName = "$STR_ACE_Interact_Menu_AlwaysUseCursorInteraction";
};
class GVAR(UseListMenu) {
value = 0;
typeName = "BOOL";
@ -30,3 +36,7 @@ class ACE_Settings {
displayName = "$STR_ACE_Interact_Menu_UseListMenu";
};
};
class ACE_Extensions {
extensions[] += {"ace_breakLine"};
};

View File

@ -29,10 +29,13 @@ if (_menuType == 0) then {
};
GVAR(keyDownTime) = diag_tickTime;
GVAR(openedMenuType) = _menuType;
GVAR(lastTimeSearchedActions) = -1000;
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
visibleMap ||
{(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}};
{(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}} ||
{(_menuType == 0) && GVAR(AlwaysUseCursorInteraction)};
if (GVAR(useCursorMenu)) then {
createDialog QGVAR(cursorMenu);
// The dialog sets:

View File

@ -24,6 +24,9 @@ _fnc_renderNearbyActions = {
_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;
_numInteractObjects = 0;
_nearestObjects = nearestObjects [ACE_player, ["All"], 13];
{
@ -46,6 +49,7 @@ _fnc_renderNearbyActions = {
_action = _x;
if ([_target, _action] call FUNC(renderBaseMenu)) then {
_numInteractions = _numInteractions + 1;
GVAR(foundActions) pushBack [_target, _action];
};
};
} forEach GVAR(objectActionList);
@ -57,6 +61,7 @@ _fnc_renderNearbyActions = {
// Try to render the menu
if ([_target, _action] call FUNC(renderBaseMenu)) then {
_numInteractions = _numInteractions + 1;
GVAR(foundActions) pushBack [_target, _action];
};
} forEach _classActions;
@ -71,7 +76,11 @@ _fnc_renderNearbyActions = {
} forEach _nearestObjects;
};
_fnc_renderLastFrameActions = {
{
_x call FUNC(renderBaseMenu);
} forEach GVAR(foundActions);
};
_fnc_renderSelfActions = {
_target = _this;
@ -109,7 +118,13 @@ _fnc_renderSelfActions = {
if (GVAR(openedMenuType) == 0) then {
if (vehicle ACE_player == ACE_player) then {
call _fnc_renderNearbyActions;
if (diag_tickTime > GVAR(lastTimeSearchedActions) + 0.20) then {
// Once every 0.2 secs, collect nearby objects active and visible action points and render them
call _fnc_renderNearbyActions;
} else {
// The rest of the frames just draw the same action points rendered the last frame
call _fnc_renderLastFrameActions;
};
} else {
(vehicle ACE_player) call _fnc_renderSelfActions;
};

View File

@ -5,20 +5,27 @@
<English>Always display cursor for self interaction</English>
<German>Immer den Cursor für Selbst-Interaktionen anzeigen.</German>
<Spanish>Mostrar siempre el cursor para la interacción propia</Spanish>
<Russian>Всегда показывать курсор для взаимодействия с собой</Russian>
<Russian>Показывать курсор (взаимодействия с собой)</Russian>
<Czech>Zobrazit kurzor v menu pro vlastní interakci</Czech>
<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>
</Key>
<Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorInteraction">
<English>Always display cursor for interaction</English>
<Spanish>Mostrar siempre el cursor para la interacción</Spanish>
<French>Toujours afficher le curseur pour les interactions</French>
<Italian>Mostra sempre il cursore per le interazioni</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_UseListMenu">
<English>Display interaction menus as lists</English>
<Spanish>Mostrar los menus de interacción como listas</Spanish>
<Russian>Показывать меню взаимодействия в виде списка</Russian>
<Russian>Меню взаимодействий в виде списка</Russian>
<French>Afficher le menu d'interaction sous forme de liste</French>
<Italian>Mostra il menù di interazione come lista</Italian>
<Polish>Wyświetlaj menu interakcji jako listę</Polish>
<German>Interaktionsmenü in Listen anzeigen</German>
</Key>
<Key ID="STR_ACE_Interact_Menu_InteractKey">
<English>Interact Key</English>
@ -65,4 +72,4 @@
<Italian>Interazioni con veicoli</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -430,7 +430,7 @@
<Spanish>Te tocaron el hombro DERECHO</Spanish>
<German>Dir wurde auf die rechte Schulter geklopft</German>
<French>On te tape sur l'épaule droite</French>
<Polish>Zostałeś klepnięty po ramieniu</Polish>
<Polish>Zostałeś klepnięty w prawe ramię</Polish>
<Hungarian>Megveregették a JOBB válladat.</Hungarian>
<Czech>Někdo tě poklepal na PRAVÉ rameno</Czech>
<Russian>Вас похлопали по ПРАВОМУ плечу</Russian>
@ -442,7 +442,7 @@
<Spanish>Te tocaron el hombro IZQUIERDO.</Spanish>
<German>Dir wurde auf die linke Schulter geklopft</German>
<French>On te tape sur l'épaule gauche</French>
<Polish>Zostałeś klepnięty po ramieniu</Polish>
<Polish>Zostałeś klepnięty w lewe ramię</Polish>
<Hungarian>Megveregették a BAL válladat.</Hungarian>
<Czech>Někdo tě poklepal na LEVÉ rameno</Czech>
<Russian>Вас похлопали по ЛЕВОМУ плечу</Russian>

View File

@ -5,7 +5,7 @@
<English>Make Inventory Display Bigger</English>
<German>Erhöhe die angezeigte Inventargröße</German>
<Spanish>Hacer la pantalla de inventario mas grande</Spanish>
<Russian>Сделать окно инвентаря больше</Russian>
<Russian>Изменить размер окна инвентаря</Russian>
<Czech>Zvětšit zobrazení inventáře</Czech>
<Polish>Powiększ UI ekwipunku</Polish>
<French>Agrandir la taille d'affichage de l'inventaire</French>
@ -16,7 +16,7 @@
<English>Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed.</English>
<German>Im Regelfall wird die Inventargröße durch die Größe der Nutzeroberfläche bestimmt. Diese Einstellung erlaubt es das Inventar unter Ausschluss der Schriftgröße zu vergrößern. Dadurch können mehr Gegenstände angezeigt werden.</German>
<Spanish>Normalmente la pantalla de inventario se escala por el tamaño de la interfaz de usuario. Esto permite ampliar el tamaño de la interfaz de usuario de inventario, pero no aumenta el tamaño de fuente, permitiendo mostrar más filas.</Spanish>
<Russian>Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк.</Russian>
<Russian>Обычно, размер окна инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря, не увеличивая размеры шрифтов, так что отображется большее количество строк.</Russian>
<Czech>Normálně se velikost invetáře škáluje s velikostí UI. Toto nastavení dovoluje škálování velikost inventáře ale nežvětšuje velikost fontu. To dovoluje zobrazení více řad v inventáři.</Czech>
<Polish>Ekwipunek skalowany jest poprzez rozmiar UI. Ta opcja pozwala powiększyć rozmiar UI ekwipunku, lecz nie zwiększa rozmiaru fontu pozwalając na wyświetlanie większej ilości wierszy.</Polish>
<French>L'inventaire est normalement affiché en fonction de la taille de l'UI. Cette option permet d'agrandir l'affichage de l'inventaire, mais n'a aucun effet sur la taille des polices permettant d'afficher plus de ligne</French>

View File

@ -19,7 +19,7 @@ private ["_playerDir", "_windSpeed", "_windDir", "_crosswind", "_headwind", "_hu
if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then {
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2);
_humidity = EGVAR(weather,currentHumidity);
_barometricPressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2)) / 7990) - 10 * overcast;
_barometricPressure = ((getPosASL ACE_player) select 2) call EFUNC(weather,calculateBarometricPressure);
_altitude = EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2);
GVAR(MIN) = [0, 0, 0, 0, _temperature, _humidity, _barometricPressure, _altitude];
GVAR(MAX) = [0, 0, 0, 0, _temperature, _humidity, _barometricPressure, _altitude];
@ -82,7 +82,7 @@ GVAR(MAX) set [5, _humidity max (GVAR(MAX) select 5)];
GVAR(TOTAL) set [5, (GVAR(TOTAL) select 5) + _humidity];
// BARO
_barometricPressure = 1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2)) / 7990) - 10 * overcast;
_barometricPressure = ((getPosASL ACE_player) select 2) call EFUNC(weather,calculateBarometricPressure);
GVAR(MIN) set [6, (GVAR(MIN) select 6) min _barometricPressure];
GVAR(MAX) set [6, _barometricPressure max (GVAR(MAX) select 6)];
GVAR(TOTAL) set [6, (GVAR(TOTAL) select 6) + _barometricPressure];

View File

@ -174,7 +174,7 @@ switch (GVAR(Menu)) do {
};
case 6: { // BARO
if (!GVAR(MinAvgMax)) then {
_textCenterBig = Str(round((1013.25 * exp(-(EGVAR(weather,Altitude) + ((getPosASL ACE_player) select 2)) / 7990) - 10 * overcast) * 10) / 10);
_textCenterBig = Str(round((((getPosASL ACE_player) select 2) call EFUNC(weather,calculateBarometricPressure)) * 10) / 10);
} else {
_textCenterLine1Left = "Min";
_textCenterLine2Left = "Avg";

View File

@ -19,6 +19,7 @@
<Russian>Карманная метеостанция Kestrel 4500NV</Russian>
<French>Station météo portable Kestrel 4500</French>
<Spanish>Kestrel 4500 Pocket Weather Tracker</Spanish>
<German>Kestrel 4500 Taschenwettermessgerät</German>
</Key>
<Key ID="STR_ACE_Kestrel4500_OpenKestrel">
<English>Open Kestrel 4500</English>
@ -28,6 +29,7 @@
<French>Ouvrir Kestrel 4500</French>
<Italian>Accendi Kestrel 4500</Italian>
<Spanish>Abrir Kestrel 4500</Spanish>
<German>Kestrel 4500 öffnen</German>
</Key>
<Key ID="STR_ACE_Kestrel4500_ShowKestrel">
<English>Show Kestrel 4500</English>
@ -36,6 +38,7 @@
<French>Afficher Kestrel 4500</French>
<Italian>Mostra Kestrel 4500</Italian>
<Spanish>Mostrar Kestrel 4500</Spanish>
<German>Kestrel 4500 anzeigen</German>
</Key>
<Key ID="STR_ACE_Kestrel4500_HideKestrel">
<English>Hide Kestrel 4500</English>
@ -44,6 +47,7 @@
<French>Cacher Kestrel 4500</French>
<Italian>Nascondi Kestrel 4500</Italian>
<Spanish>Esconder Kestrel 4500</Spanish>
<German>Kestrel 4500 wegstecken</German>
</Key>
<Key ID="STR_ACE_Kestrel4500_KestrelDialogKey">
<English>Open Kestrel 4500</English>
@ -52,6 +56,7 @@
<French>Ouvrir Kestrel 4500</French>
<Italian>Accendi Kestrel 4500</Italian>
<Spanish>Abrir Kestrel 4500</Spanish>
<German>Kestrel 4500 öffnen</German>
</Key>
<Key ID="STR_ACE_Kestrel4500_DisplayKestrelKey">
<English>Show Kestrel 4500</English>
@ -60,6 +65,7 @@
<French>Afficher Kestrel 4500</French>
<Italian>Mostra Kestrel 4500</Italian>
<Spanish>Mostrar Kestrel 4500</Spanish>
<German>Kestrel 4500 anzeigen</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -42,7 +42,7 @@
<Italian>&lt;t color='#9cf953'&gt;Uso: &lt;/t&gt;Laser ON/OFF</Italian>
<Polish>&lt;t color='#9cf953'&gt;Użyj: &lt;/t&gt;wł./wył. laser</Polish>
<Portuguese>&lt;t color='#9cf953'&gt;Uso: &lt;/t&gt;Ativar/Desativar laser</Portuguese>
<Russian>&lt;t color='#9cf953'&gt;Использовать: &lt;/t&gt;вкл/выкл лазер</Russian>
<Russian>&lt;t color='#9cf953'&gt;Использовать: &lt;/t&gt;ВКЛ/ВЫКЛ лазер</Russian>
<Spanish>&lt;t color='#9cf953'&gt;Usar: &lt;/t&gt;encender/apagar láser</Spanish>
<Hungarian>&lt;t color='#9cf953'&gt;Használat: &lt;/t&gt;Lézer BE/KI kapcsolása</Hungarian>
</Key>
@ -72,4 +72,4 @@
<Spanish>Cambiar Laser / Laser IR</Spanish>
</Key>
</Package>
</Project>
</Project>

View File

@ -0,0 +1,12 @@
class CfgSounds {
class ACE_Wirecutter_sound {
name = "ACE_wirecutter_sound";
sound[] = {QUOTE(PATHTOF(sound\wire_cut.ogg)), "db-0", 1};
titles[] = {};
};
class ACE_Wirecutter_sound_long {
name = "ACE_wirecutter_sound_long";
sound[] = {QUOTE(PATHTOF(sound\wire_cut_long.ogg)), "db-0", 1};
titles[] = {};
};
};

View File

@ -79,7 +79,11 @@ class ACE_Settings {
displayName = "$STR_ACE_Medical_litterSimulationDetail";
description = "$STR_ACE_Medical_litterSimulationDetail_Desc";
typeName = "SCALAR";
value = 500;
value = 3;
values[] = {"Off", "Low", "Medium", "High", "Ultra"};
_values[] = { 0, 50, 100, 1000, 5000 };
isClientSettable = 1;
};
class GVAR(litterCleanUpDelay) {

View File

@ -4,7 +4,7 @@
if(!hasInterface) exitWith { false };
PARAMS_3(_litterClass,_position,_direction);
private["_litterObject"];
private["_litterObject", "_maxLitterCount"];
if (isNil QGVAR(allCreatedLitter)) then {
GVAR(allCreatedLitter) = [];
@ -14,7 +14,8 @@ if (isNil QGVAR(allCreatedLitter)) then {
_litterObject = _litterClass createVehicleLocal _position;
_litterObject setDir _direction;
if((count GVAR(allCreatedLitter)) > GVAR(litterSimulationDetail) ) then {
_maxLitterCount = getArray (configFile >> "ACE_Settings" >> QGVAR(litterSimulationDetail) >> "_values") select GVAR(litterSimulationDetail);
if((count GVAR(allCreatedLitter)) > _maxLitterCount ) then {
// gank the first litter object, and spawn ours.
private["_oldLitter"];
_oldLitter = GVAR(allCreatedLitter) deleteAt 0;

View File

@ -1,12 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="Medical">
<Key ID="TR_ACE_Medical_litterSimulationDetail">
<English>Litter Simulation Detail</English>
<Polish>Detale zużytych medykamentów</Polish>
</Key>
<Key ID="TR_ACE_Medical_litterSimulationDetail_Desc">
<English>Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting.</English>
<Polish>Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta.</Polish>
</Key>
<Key ID="STR_ACE_Medical_Inject_Atropine">
<English>Inject Atropine</English>
@ -91,7 +92,7 @@
<English>Bandage</English>
<German>Verbinden</German>
<Spanish>Venda</Spanish>
<Polish>Bandaż</Polish>
<Polish>Bandażuj</Polish>
<Czech>Obvázat</Czech>
<French>Pansement</French>
<Italian>Benda</Italian>
@ -377,7 +378,7 @@
<English>Give Blood IV (1000ml)</English>
<German>Bluttransfusion IV (1000ml)</German>
<Spanish>Dar Sangre IV (1000ml)</Spanish>
<Russian>Дать кровь для в/в вливания (1000 мл)</Russian>
<Russian>Перелить пакет крови (1000 мл)</Russian>
<Polish>Podaj krew IV (1000ml)</Polish>
<French>Administrer du sang en IV (1000ml)</French>
<Czech>Podat krev. transfúzi (1000ml)</Czech>
@ -388,7 +389,7 @@
<English>Give Blood IV (500ml)</English>
<German>Bluttransfusion IV (500ml)</German>
<Spanish>Dar Sangre IV (500ml)</Spanish>
<Russian>Дать кровь для в/в вливания (500 мл)</Russian>
<Russian>Перелить пакет крови (500 мл)</Russian>
<Polish>Podaj krew IV (500ml)</Polish>
<French>Administrer du sang en IV (500ml)</French>
<Czech>Podat krev. transfúzi (500ml) </Czech>
@ -399,7 +400,7 @@
<English>Give Blood IV (250ml)</English>
<German>Bluttransfusion IV (250ml)</German>
<Spanish>Dar Sangre IV (250ml)</Spanish>
<Russian>Дать кровь для в/в вливания (250 мл)</Russian>
<Russian>Перелить пакет крови (250 мл)</Russian>
<Polish>Podaj krew IV (250ml)</Polish>
<French>Administrer du sang en IV (250ml)</French>
<Czech>Podat krev. transfúzi (250ml)</Czech>
@ -410,7 +411,7 @@
<English>Give Plasma IV (1000ml)</English>
<German>Plasmatransfusion IV (1000ml)</German>
<Spanish>Dar Plasma IV (1000ml)</Spanish>
<Russian>Дать плазму для в/в вливания (1000 мл)</Russian>
<Russian>Перелить пакет плазмы (1000 мл)</Russian>
<Polish>Podaj osocze IV (1000ml)</Polish>
<French>Administrer du plasma en IV (1000ml)</French>
<Czech>Podat plazmu (1000ml)</Czech>
@ -421,7 +422,7 @@
<English>Give Plasma IV (500ml)</English>
<German>Plasmatransfusion IV (500ml)</German>
<Spanish>Dar Plasma IV (500ml)</Spanish>
<Russian>Дать плазму для в/в вливания (500 мл)</Russian>
<Russian>Перелить пакет плазмы (500 мл)</Russian>
<Polish>Podaj osocze IV (500ml)</Polish>
<French>Administrer du plasma en IV (500ml)</French>
<Czech>Podat plazmu (500ml)</Czech>
@ -432,7 +433,7 @@
<English>Give Plasma IV (250ml)</English>
<German>Plasmatransfusion IV (250ml)</German>
<Spanish>Dar Plasma IV (250ml)</Spanish>
<Russian>Дать плазму для в/в вливания (250 мл)</Russian>
<Russian>Перелить пакет плазмы (250 мл)</Russian>
<Polish>Podaj osocze IV (250ml)</Polish>
<French>Administrer du plasma en IV (250ml)</French>
<Czech>Podat plazmu (250ml)</Czech>
@ -443,7 +444,7 @@
<English>Give Saline IV (1000ml)</English>
<German>Kochsaltzlösung IV (1000ml)</German>
<Spanish>Dar Salino IV (1000ml)</Spanish>
<Russian>Дать физраствор для в/в вливания (1000 мл)</Russian>
<Russian>Перелить пакет физраствора (1000 мл)</Russian>
<Polish>Podaj sól fizjologiczną IV (1000ml)</Polish>
<French>Administrer de la solution saline en IV (1000ml)</French>
<Czech>Podaz fyz. roztok (1000ml)</Czech>
@ -454,7 +455,7 @@
<English>Give Saline IV (500ml)</English>
<German>Kochsaltzlösung IV (500ml)</German>
<Spanish>Dar Salino IV (500ml)</Spanish>
<Russian>Дать физраствор для в/в вливания (500 мл)</Russian>
<Russian>Перелить пакет физраствора (500 мл)</Russian>
<Polish>Podaj sól fizjologiczną IV (500ml)</Polish>
<French>Administrer de la solution saline en IV (500ml)</French>
<Czech>Podaz fyz. roztok (500ml)</Czech>
@ -465,7 +466,7 @@
<English>Give Saline IV (250ml)</English>
<German>Kochsaltzlösung IV (250ml)</German>
<Spanish>Dar Salino IV (250ml)</Spanish>
<Russian>Дать физраствор для в/в вливания (250 мл)</Russian>
<Russian>Перелить пакет физраствора (250 мл)</Russian>
<Polish>Podaj sól fizjologiczną IV (250ml)</Polish>
<French>Administrer de la solution saline en IV (250ml)</French>
<Czech>Podaz fyz. roztok (250ml)</Czech>
@ -476,7 +477,7 @@
<English>Minor</English>
<German>Gering</German>
<Spanish>Menor</Spanish>
<Russian>Незначительная</Russian>
<Russian>Несрочная помощь</Russian>
<Polish>Normalny</Polish>
<French>Léger</French>
<Czech>Minimální</Czech>
@ -486,7 +487,7 @@
<Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_DELAYED">
<English>Delayed</English>
<Spanish>Retrasado</Spanish>
<Russian>Груз 300</Russian>
<Russian>Срочная помощь</Russian>
<Polish>Opóźniony</Polish>
<French>Différé</French>
<German>Verzögert</German>
@ -497,7 +498,7 @@
<Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_IMMEDIATE">
<English>Immediate</English>
<Spanish>Inmediato</Spanish>
<Russian>Помощь отложена</Russian>
<Russian>Неотложная помощь</Russian>
<Polish>Natychmiastowy</Polish>
<French>Urgence Immédiate</French>
<German>Sofort</German>
@ -508,7 +509,7 @@
<Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_DECEASED">
<English>Deceased</English>
<Spanish>Fallecido</Spanish>
<Russian>Груз 200</Russian>
<Russian>Труп</Russian>
<Polish>Nie żyje</Polish>
<French>Décédé</French>
<German>Verstorben</German>
@ -519,7 +520,7 @@
<Key ID="STR_ACE_MEDICAL_TRIAGE_STATUS_NONE">
<English>None</English>
<Spanish>Ninguno</Spanish>
<Russian>Нет</Russian>
<Russian>Отсутствует</Russian>
<Polish>Brak</Polish>
<French>Aucun</French>
<German>Keine</German>
@ -1528,7 +1529,7 @@
<English>Heavily wounded</English>
<German>Schwer verwundet:</German>
<Polish>Ciężko ranny</Polish>
<Russian>Сильно ранен</Russian>
<Russian>Тяжелые ранения</Russian>
<Italian>Gravemente ferito</Italian>
<Spanish>Gravemente herido</Spanish>
<French>Lourdement blessé</French>
@ -1537,7 +1538,7 @@
<English>Lightly wounded</English>
<German>Leicht verwundet:</German>
<Polish>Lekko ranny</Polish>
<Russian>Легко ранен</Russian>
<Russian>Легкие ранения</Russian>
<Italian>Leggermente ferito</Italian>
<Spanish>Levemente herido</Spanish>
<French>Légèrement blessé</French>
@ -1546,7 +1547,7 @@
<English>Very lightly wounded</English>
<German>Sehr leicht verwundet:</German>
<Polish>B. lekko ranny</Polish>
<Russian>Очень легко ранен</Russian>
<Russian>Царапины</Russian>
<Italian>Ferito lievemente</Italian>
<Spanish>Muy levemente herido</Spanish>
<French>Très légèrement blessé</French>
@ -1555,7 +1556,7 @@
<English>Head</English>
<German>Kopf</German>
<Polish>Głowa</Polish>
<Russian>Голова</Russian>
<Russian>Головы</Russian>
<Italian>Testa</Italian>
<Spanish>Cabeza</Spanish>
<French>Tête</French>
@ -1564,7 +1565,7 @@
<English>Torso</English>
<German>Torso</German>
<Polish>Tors</Polish>
<Russian>Торс</Russian>
<Russian>Торса</Russian>
<Italian>Torso</Italian>
<Spanish>Torso</Spanish>
<French>Torse</French>
@ -1573,7 +1574,7 @@
<English>Left Arm</English>
<German>Linker Arm</German>
<Polish>Lewe ramię</Polish>
<Russian>Левая рука</Russian>
<Russian>Левой руки</Russian>
<Italian>Braccio sinistro</Italian>
<Spanish>Brazo izquierdo</Spanish>
<French>Bras gouche</French>
@ -1582,7 +1583,7 @@
<English>Right Arm</English>
<German>Rechter Arm</German>
<Polish>Prawe ramię</Polish>
<Russian>Правая рука</Russian>
<Russian>Правой руки</Russian>
<Italian>Braccio destro</Italian>
<Spanish>Brazo derecho</Spanish>
<French>Bras droit</French>
@ -1591,7 +1592,7 @@
<English>Left Leg</English>
<German>Linkes Bein</German>
<Polish>Lewa noga</Polish>
<Russian>Левая нога</Russian>
<Russian>Левой ноги</Russian>
<Italian>Gamba sinistra</Italian>
<Spanish>Pierna izquierda</Spanish>
<French>Jambe gauche</French>
@ -1600,7 +1601,7 @@
<English>Right Leg</English>
<German>Rechtes Bein</German>
<Polish>Prawa noga</Polish>
<Russian>Правая нога</Russian>
<Russian>Правой ноги</Russian>
<Italian>Gamba destra</Italian>
<Spanish>Pierna derecha</Spanish>
<French>Jambe droite</French>
@ -1609,7 +1610,7 @@
<English>Pain Effect Type</English>
<German>Schmerzeffekt-Typ</German>
<Polish>Rodzaj efektu bólu</Polish>
<Russian>Вид боли</Russian>
<Russian>Визуальный эффект боли</Russian>
<Italian>Pain Effect Type</Italian>
<Spanish>Tipo de efecto de dolor</Spanish>
<French>Type d'effet de douleur</French>
@ -1618,7 +1619,7 @@
<English>Colour Flashing</English>
<German>Farbblinken</German>
<Polish>Pulsujące kolory</Polish>
<Russian>Разноцветные вспышки</Russian>
<Russian>Пульсирующий свет</Russian>
<Italian>Colore lampeggiante</Italian>
<Spanish>Parpadeo de color</Spanish>
<French>Flash de couleur</French>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="microdagr">
<Key ID="STR_ACE_microdagr_itemName">
@ -252,7 +251,7 @@
<Spanish>Mostrar MicroDAGR</Spanish>
<Russian>Показать MicroDAGR</Russian>
<Czech>Ukázat MicroDAGR GPS</Czech>
<Polish>Pokaż&lt;br /&gt;MicroDAGR</Polish>
<Polish>Pokaż MicroDAGR</Polish>
<French>Afficher MicroDAGR</French>
<Hungarian>MicroDAGR mutatása</Hungarian>
<Italian>Mostra MicroDAGR</Italian>
@ -263,7 +262,7 @@
<Spanish>Configurar MicroDAGR</Spanish>
<Russian>Настроить MicroDAGR</Russian>
<Czech>Konfigurovat MicroDAGR GPS</Czech>
<Polish>Konfiguruj&lt;br /&gt;MicroDAGR</Polish>
<Polish>Konfiguruj MicroDAGR</Polish>
<French>Configurer MicroDAGR</French>
<Hungarian>MicroDAGR konfigurálása</Hungarian>
<Italian>ConfiguraMicroDAGR</Italian>
@ -274,7 +273,7 @@
<Spanish>Cerrar MicroDAGR</Spanish>
<Russian>Закрыть MicroDAGR</Russian>
<Czech>Zavřít MicroDAGR GPS</Czech>
<Polish>Zamknij&lt;br /&gt;MicroDAGR</Polish>
<Polish>Zamknij MicroDAGR</Polish>
<French>Fermer MicroDAGR</French>
<Hungarian>MicroDAGR elrejtése</Hungarian>
<Italian>Chiudi MicroDAGR</Italian>

View File

@ -1,6 +1,6 @@
#include "script_component.hpp"
PARAMS_2(_target,_args);
if(!local _target) exitWith {};
if(isNil "_target" || {isNull _target} || {!local _target} ) exitWith { false };
[FUNC(guidancePFH), 0, _args] call cba_fnc_addPerFrameHandler;

View File

@ -86,13 +86,20 @@ _args = [_this,
// Laser code needs to give us a shooter for LOBL, or the seeker unit needs to be able to shift locality
// Based on its homing laser
// Lasers need to be handled in a special LOAL/LOBL case
_guidingUnit = ACE_player;
if(local _guidingUnit) then {
//if(isPlayer _shooter) then {
// _guidingUnit = ACE_player;
//
// if(local _guidingUnit) then {
// [FUNC(guidancePFH), 0, _args ] call cba_fnc_addPerFrameHandler;
// } else {
// [QGVAR(handoff), [_guidingUnit, _args] ] call FUNC(doHandoff);
// };
//} else {
[FUNC(guidancePFH), 0, _args ] call cba_fnc_addPerFrameHandler;
} else {
[QGVAR(handoff), [_guidingUnit, _args] ] call FUNC(doHandoff);
};
//};
/* Clears locking settings
(vehicle _shooter) setVariable [QGVAR(target), nil];
(vehicle _shooter) setVariable [QGVAR(seekerType), nil];

View File

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="missileguidance">
<Key ID="STR_ACE_MissileGuidance">
@ -11,10 +12,11 @@
<Italian>Guida missili avanzata</Italian>
<Portuguese>Avançado Missile Guidance</Portuguese>
<Hungarian>Fejlett rakétairányító</Hungarian>
<Russian>Расширенный ракетой</Russian>
<Russian>Продвинутое наведение ракет</Russian>
</Key>
<Key ID="STR_ACE_MissileGuidance_Desc">
<English>Advanced missile guidance, or AMG, provides multiple enhancements to missile locking and firing. It is also a framework required for missile weapon types.</English>
<Polish>Zaawansowane namierzanie rakiet, lub ZNR, dostarcza wiele poprawek do systemu namierzania rakiet oraz dodaje nowe tryby strzału. Jest to wymagana opcja dla broni rakietowych.</Polish>
</Key>
<Key ID="STR_ACE_Hydra70_DAGR">
<English>Hydra-70 DAGR Missile</English>
@ -26,7 +28,7 @@
<Italian>Missile Hydra-70 DAGR</Italian>
<Portuguese></Portuguese>
<Hungarian>Hydra-70 DAGR rakéta</Hungarian>
<Russian></Russian>
<Russian>Hydra-70 DAGR</Russian>
</Key>
<Key ID="STR_ACE_Hydra70_DAGR_Short">
<English>DAGR</English>
@ -38,7 +40,7 @@
<Italian>DAGR</Italian>
<Portuguese></Portuguese>
<Hungarian>DAGR</Hungarian>
<Russian></Russian>
<Russian>DAGR</Russian>
</Key>
<Key ID="STR_ACE_Hydra70_DAGR_Desc">
<English>Hydra-70 DAGR Laser Guided Missile</English>
@ -50,7 +52,7 @@
<Italian>Hydra-70 DAGR missile guida laser</Italian>
<Portuguese></Portuguese>
<Hungarian>Hydra-70 DAGR lézer-irányított rakéta</Hungarian>
<Russian></Russian>
<Russian>Управляемая ракета лазерного наведения Hydra-70 DAGR</Russian>
</Key>
<Key ID="STR_ACE_Hellfire_AGM114K">
<English>Hellfire II AGM-114K Missile</English>
@ -62,7 +64,7 @@
<Italian>Missile Hellfire II AGM-114K</Italian>
<Portuguese></Portuguese>
<Hungarian>Hellfire II AGM-114K rakéta</Hungarian>
<Russian></Russian>
<Russian>Hellfire II AGM-114K</Russian>
</Key>
<Key ID="STR_ACE_Hellfire_AGM114K_Short">
<English>AGM-114K</English>
@ -74,7 +76,7 @@
<Italian>AGM-114K</Italian>
<Portuguese></Portuguese>
<Hungarian>AGM-114K</Hungarian>
<Russian></Russian>
<Russian>AGM-114K</Russian>
</Key>
<Key ID="STR_ACE_Hellfire_AGM114K_desc">
<English>Hellfire II AGM-114K Laser Guided Missile</English>
@ -86,7 +88,7 @@
<Italian>Missile guida laser Hellfire II AGM-114K</Italian>
<Portuguese></Portuguese>
<Hungarian>Hellfire II AGM-114K lézer-irányított rakéta</Hungarian>
<Russian></Russian>
<Russian>Управляемая ракета лазерного наведения Hellfire II AGM-114K</Russian>
</Key>
</Package>
</Project>

View File

@ -22,7 +22,7 @@
<Czech>Zobrazit jména hráčů</Czech>
<Portuguese>Mostrar nomes de jogadores</Portuguese>
<Italian>Mostra i nomi dei giocatori</Italian>
<Russian>Показать имена игроков</Russian>
<Russian>Показывать имена игроков (включить имена)</Russian>
</Key>
<Key ID="STR_ACE_NameTags_ShowPlayerNamesOnlyOnCursor">
<English>Show player name only on cursor (requires player names)</English>
@ -34,7 +34,7 @@
<Italian>Mostra i nomi solo se puntati (richiede mostra nomi abilitato)</Italian>
<Portuguese>Mostrar nome de jogador somente no cursor (requer nome de jogadores)</Portuguese>
<Hungarian>Játékosok nevének mutatása csak a kurzoron (a nevek mutatása szükséges)</Hungarian>
<Russian>Показать имена игроков только под курсором (требует имен игроков)</Russian>
<Russian>Показать имена игроков только под курсором (при включенных именах)</Russian>
</Key>
<Key ID="STR_ACE_NameTags_ShowPlayerNamesOnlyOnKeyPress">
<English>Show player name only on keypress (requires player names)</English>
@ -44,7 +44,7 @@
<Czech>Zobrazit jména hráčů jen na klávesu (vyžaduje jména hráčů)</Czech>
<Polish>Pokaż imiona graczy tylko po przytrzymaniu klawisza (wymagana opcja Pokaż imiona graczy)</Polish>
<Hungarian>Játékosnevek mutatása csak gombnyomásra (a nevek mutatása szükséges)</Hungarian>
<Russian>Показать имена игроков только по нажатию клавиши (требует имен игроков)</Russian>
<Russian>Показать имена игроков только по нажатию клавиши (при включенных именах)</Russian>
<Italian>Mostra i nomi solo se si preme il tasto (richiede mostra nomi abilitato)</Italian>
</Key>
<Key ID="STR_ACE_NameTags_ShowPlayerRanks">
@ -57,7 +57,7 @@
<Italian>Mostra i gradi (richiede mostra nomi abilitato)</Italian>
<Portuguese>Mostrar patente de jogadores (requer nome de jogadores)</Portuguese>
<Hungarian>Játékosok rendfokozatának mutatása (a nevek mutatása szükséges)</Hungarian>
<Russian>Показать звания игроков (требует имен игроков)</Russian>
<Russian>Показывать звания игроков (при вкл. именах)</Russian>
</Key>
<Key ID="STR_ACE_NameTags_ShowVehicleCrewInfo">
<English>Show vehicle crew info</English>
@ -66,7 +66,7 @@
<Spanish>Mostrar tripulantes</Spanish>
<Polish>Pokaż załogę pojazdu</Polish>
<Czech>Zobrazit info o posádce vozidla</Czech>
<Russian>Показать экипаж</Russian>
<Russian>Показывать информацию об экипаже</Russian>
<Hungarian>Jármű-legénység adatainak mutatása</Hungarian>
<Italian>Mostra le informazioni sull'equipaggio del veicolo</Italian>
</Key>
@ -74,7 +74,7 @@
<English>Show name tags for AI units</English>
<German>Zeige Namen für KI Einheiten</German>
<Spanish>Mostrar etiquetas de nombre para unidades IA </Spanish>
<Russian>Показывать именые метки ИИ</Russian>
<Russian>Показывать имена ботов</Russian>
<Czech>Zobrazit jména AI</Czech>
<Polish>Wyświetl imiona jednostek AI</Polish>
<French>Afficher les noms des IA</French>
@ -85,7 +85,7 @@
<English>Show SoundWaves (requires player names)</English>
<German>Zeigen Schallwellen (benötigt Spielernamen)</German>
<Spanish>Mostrar onda sonora (requiere Mostrar nombres de jugadores)</Spanish>
<Russian>Показывать звуковые волны (требует имен игроков)</Russian>
<Russian>Индикатор разговора (при вкл. именах)</Russian>
<Czech>Zobrazit SoundWaves (vyžaduje jména hráčů)</Czech>
<Polish>Pokaż fale dźwiękowe (wymagana opcja Pokaż imiona graczy)</Polish>
<French>Afficher "qui parle" (si noms affichés)</French>
@ -104,4 +104,4 @@
<Italian>Colore nametag di default (membri non del gruppo)</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -91,7 +91,7 @@
<Spanish>Sistema de visión nocturna (Panorámicas)</Spanish>
<Polish>Gogle noktowizyjne (panoramiczne)</Polish>
<Czech>Noktovizor (Širokoúhlý)</Czech>
<Russian>ПНВ (Широкий)</Russian>
<Russian>ПНВ (Широкоугольный)</Russian>
<French>JVN (Large)</French>
<Hungarian>Éjjellátó szemüveg (széles látószögű)</Hungarian>
</Key>
@ -102,7 +102,7 @@
<Polish>Czułość: %1</Polish>
<Czech>Jas: %1</Czech>
<French>Luminosité : %1</French>
<Russian>Контраст: </Russian>
<Russian>Яркость: %1</Russian>
<Hungarian>Fényerő: %1</Hungarian>
<Portuguese>Luminosidade: %1</Portuguese>
<Italian>Luminosità: %1</Italian>
@ -132,4 +132,4 @@
<Italian>Riduci la luminosità dell'NVG</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -98,7 +98,7 @@ class CfgWeapons {
class ACE_optic_Hamr_PIP: ACE_optic_Hamr_2D {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_Hamr_PIP";
scopeArsenal = 1;
//scopeArsenal = 1;
displayName = "$STR_ACE_optic_hamr_pip";
class ItemInfo: ItemInfo {
@ -147,7 +147,7 @@ class CfgWeapons {
class ACE_optic_Arco_PIP: ACE_optic_Arco_2D {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_Arco_PIP";
scopeArsenal = 1;
//scopeArsenal = 1;
displayName = "$STR_ACE_optic_arco_pip";
class ItemInfo: ItemInfo {
@ -197,7 +197,7 @@ class CfgWeapons {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_MRCO_PIP";
scope = 1;
scopeArsenal = 1;
//scopeArsenal = 1;
displayName = "$STR_ACE_optic_valdada_pip";
class ItemInfo: ItemInfo {
@ -239,7 +239,7 @@ class CfgWeapons {
class ACE_optic_SOS_PIP: ACE_optic_SOS_2D {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_SOS_PIP";
scopeArsenal = 1;
//scopeArsenal = 1;
displayName = "$STR_ACE_optic_sos_pip";
class ItemInfo: ItemInfo {
@ -290,7 +290,7 @@ class CfgWeapons {
class ACE_optic_LRPS_PIP: ACE_optic_LRPS_2D {
author = "$STR_ACE_Common_ACETeam";
_generalMacro = "ACE_optic_LRPS_PIP";
scopeArsenal = 1;
//scopeArsenal = 1;
displayName = "$STR_ACE_optic_lrps_pip";
class ItemInfo: ItemInfo {

View File

@ -22,3 +22,19 @@ if (!hasInterface) exitWith {};
uiNamespace setVariable [QGVAR(RscWeaponInfo2D), _this select 0];
};
}] call EFUNC(common,addEventHandler);
// camera has to be re-created every time another camera is created. Otherwise r2t is either black or transparent. @todo Add popular custom cameras to the event in ACE_common.
["activeCameraChanged", {
if !(_this select 1) then {
deleteVehicle GVAR(camera);
// PiP technique by BadBenson
GVAR(camera) = "camera" camCreate positioncameratoworld [0,0,0];
GVAR(camera) camSetFov 0.7;
GVAR(camera) camSetTarget ACE_player;
GVAR(camera) camCommit 1;
"ace_optics_rendertarget0" setPiPEffect [2, 1.0, 1.0, 1.0, 0.0, [0.0, 1.0, 0.0, 0.25], [1.0, 0.0, 1.0, 1.0], [0.199, 0.587, 0.114, 0.0]];
GVAR(camera) cameraEffect ["INTERNAL", "BACK", "ace_optics_rendertarget0"];
};
}] call EFUNC(common,addEventHandler);

View File

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="OptionsMenu">
<Key ID="STR_ACE_OptionsMenu_OpenConfigMenu">
@ -99,7 +100,7 @@
<German>Einstellung:</German>
<Russian>Установки:</Russian>
<Spanish>Ajuste:</Spanish>
<Polish>Ustawienie:</Polish>
<Polish>Ustaw:</Polish>
<French>Paramètres</French>
<Hungarian>Opció:</Hungarian>
<Italian>Parametri:</Italian>
@ -216,6 +217,7 @@
<Key ID="STR_ACE_optionsMenu_uiScaing">
<English>Option Menu UI Scaling</English>
<French>Menu option: taille de l'UI</French>
<Polish>Skalowanie UI menu ustawień</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -137,6 +137,7 @@
<French>Vérifier la température</French>
<Hungarian>Fegyverhő ellenőrzése</Hungarian>
<Russian>Проверить температуру оружия</Russian>
<German>Waffentemperatur prüfen</German>
</Key>
<Key ID="STR_ACE_Overheating_CheckingTemperature">
<English>Checking temperature ...</English>
@ -163,4 +164,4 @@
<Russian>Температура</Russian>
</Key>
</Package>
</Project>
</Project>

View File

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

View File

@ -0,0 +1,255 @@
#define KICKBACK 1.6
#define MUZZLETEMP 1
#define MUZZLEPERM 0.1
#define MUZZLECLIMB_POS 1
#define MUZZLERIGHT_POS 0.4
#define MUZZLECLIMB_MAG 1
#define MUZZLERIGHT_MAG 1
class CfgRecoils {
class Default {
// doc: http://forums.bistudio.com/showthread.php?188999-Recoil-Overhaul-Feedback&s=dba8590ec07adb5ffa87f72d38dde6fc&p=2886744&viewfull=1#post2886744
// {horizontal axis position, vertical axis position, horizontal magnitude, vertical magnitude}
muzzleOuter[] = {0*MUZZLERIGHT_POS,0.4*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.6*MUZZLECLIMB_MAG};
// restricted area inside the outer ellipse where the recoil cannot end
muzzleInner[] = {0,0.05,0.2,0.2};
// minimum and maximum interval for backward force
kickBack[] = {0.05*KICKBACK,0.1*KICKBACK};
permanent = 0.1*MUZZLEPERM;
temporary = 0.01*MUZZLETEMP;
};
class recoil_default: Default {
muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
muzzleInner[] = {0,0,0.1,0.1};
kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
permanent = 0.1*MUZZLEPERM;
temporary = 0.01*MUZZLETEMP;
};
class recoil_mk20: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
kickBack[] = {0.01*KICKBACK,0.03*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_mk20c: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.015*MUZZLETEMP;
};
class recoil_trg20: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.015*MUZZLETEMP;
};
class recoil_trg21: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
kickBack[] = {0.01*KICKBACK,0.03*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_mx: recoil_default {
muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.4*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_mxc: recoil_default {
muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1.2*MUZZLECLIMB_POS,0.4*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
temporary = 0.015*MUZZLETEMP;
};
class recoil_sw: recoil_default {
muzzleOuter[] = {0.3*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.005*MUZZLETEMP;
};
class recoil_mxm: recoil_default {
muzzleOuter[] = {0.3*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.4*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_ktb: recoil_default {
muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_ktbc: recoil_default {
muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1.2*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
temporary = 0.015*MUZZLETEMP;
};
class recoil_smg_01: recoil_default {
muzzleOuter[] = {0.1*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
kickBack[] = {0.01*KICKBACK,0.03*KICKBACK};
temporary = 0.015*MUZZLETEMP;
};
class recoil_smg_02: recoil_default {
muzzleOuter[] = {0.1*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
kickBack[] = {0.01*KICKBACK,0.02*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_pdw: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.02*MUZZLETEMP;
};
class recoil_sdar: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.3*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_pistol_p07: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
temporary = 0.03*MUZZLETEMP;
};
class recoil_pistol_rook40: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
temporary = 0.02*MUZZLETEMP;
};
class recoil_pistol_acpc2: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.04*KICKBACK,0.08*KICKBACK};
temporary = 0.04*MUZZLETEMP;
};
class recoil_pistol_4five: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.04*KICKBACK,0.08*KICKBACK};
temporary = 0.06*MUZZLETEMP;
};
class recoil_pistol_zubr: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.04*KICKBACK,0.08*KICKBACK};
temporary = 0.08*MUZZLETEMP;
};
class recoil_pistol_signal: recoil_default {
muzzleOuter[] = {0.2*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.2*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.02*MUZZLETEMP;
};
class recoil_rpg: recoil_default {
muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
kickBack[] = {0.08*KICKBACK,0.1*KICKBACK};
temporary = 0.1*MUZZLETEMP;
};
class recoil_nlaw: recoil_default {
muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
kickBack[] = {0.06*KICKBACK,0.08*KICKBACK};
temporary = 0.08*MUZZLETEMP;
};
class recoil_titan_long: recoil_default {
muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
kickBack[] = {0.1*KICKBACK,0.12*KICKBACK};
temporary = 0.15*MUZZLETEMP;
};
class recoil_titan_short: recoil_default {
muzzleOuter[] = {2*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,1*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
kickBack[] = {0.1*KICKBACK,0.12*KICKBACK};
temporary = 0.12*MUZZLETEMP;
};
class recoil_mk200: recoil_default {
muzzleOuter[] = {0.4*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG};
kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
temporary = 0.005*MUZZLETEMP;
};
class recoil_zafir: recoil_default {
muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.08*KICKBACK};
temporary = 0.005*MUZZLETEMP;
};
class recoil_m320: recoil_default {
muzzleOuter[] = {1*MUZZLERIGHT_POS,3*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.6*MUZZLECLIMB_MAG};
kickBack[] = {0.08*KICKBACK,0.1*KICKBACK};
temporary = 0.02*MUZZLETEMP;
};
class recoil_gm6: recoil_default {
muzzleOuter[] = {1.4*MUZZLERIGHT_POS,3.5*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.8*MUZZLECLIMB_MAG};
kickBack[] = {0.1*KICKBACK,0.12*KICKBACK};
temporary = 0.025*MUZZLETEMP;
};
class recoil_ebr: recoil_default {
muzzleOuter[] = {0.4*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG};
kickBack[] = {0.04*KICKBACK,0.07*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_dmr_01: recoil_default {
muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
kickBack[] = {0.03*KICKBACK,0.08*KICKBACK};
temporary = 0.015*MUZZLETEMP;
};
class recoil_dmr_02: recoil_default {
muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
kickBack[] = {0.06*KICKBACK,0.08*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_dmr_03: recoil_default {
muzzleOuter[] = {0.3*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG};
kickBack[] = {0.03*KICKBACK,0.06*KICKBACK};
temporary = 0.005*MUZZLETEMP;
};
class recoil_dmr_04: recoil_default {
muzzleOuter[] = {0.4*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.04*KICKBACK};
temporary = 0.015*MUZZLETEMP;
};
class recoil_dmr_05: recoil_default {
muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2.5*MUZZLECLIMB_POS,0.8*MUZZLERIGHT_MAG,0.6*MUZZLECLIMB_MAG};
kickBack[] = {0.08*KICKBACK,0.1*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_dmr_06: recoil_default {
muzzleOuter[] = {0.5*MUZZLERIGHT_POS,2*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.5*MUZZLECLIMB_MAG};
kickBack[] = {0.05*KICKBACK,0.1*KICKBACK};
temporary = 0.01*MUZZLETEMP;
};
class recoil_mmg_01: recoil_default {
muzzleOuter[] = {0.6*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.8*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG};
kickBack[] = {0.02*KICKBACK,0.08*KICKBACK};
temporary = 0.005*MUZZLETEMP;
};
class recoil_mmg_02: recoil_default {
muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG};
kickBack[] = {0.04*KICKBACK,0.08*KICKBACK};
temporary = 0.005*MUZZLETEMP;
};
};

15
addons/recoil/config.cpp Normal file
View File

@ -0,0 +1,15 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"commy2"};
authorUrl = "";
VERSION_CONFIG;
};
};
#include "CfgRecoils.hpp"

View File

@ -0,0 +1,12 @@
#define COMPONENT recoil
#include "\z\ace\addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_RECOIL
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_ENABLED_RECOIL
#define DEBUG_SETTINGS DEBUG_ENABLED_RECOIL
#endif
#include "\z\ace\addons\main\script_macros.hpp"

View File

@ -33,7 +33,7 @@
<Czech>Zkontrolovat Munici</Czech>
<Italian>Controlla le munizioni</Italian>
<Portuguese>Conferir munições</Portuguese>
<Russian>Kонтроль Боеприпасы</Russian>
<Russian>Проверить боеприпасы</Russian>
</Key>
<Key ID="STR_ACE_Reload_Ammo">
<English>Ammo</English>

View File

@ -29,5 +29,5 @@ if (GVAR(SavePreDeathGear)) then {
};
if (missionNamespace getVariable [QGVAR(showFriendlyFireMessage), false]) then {
[_this, FUNC(showFriendlyFireMessage), 2] call EFUNC(common,execRemoteFnc);
[_this, QUOTE(DFUNC(showFriendlyFireMessage)), 2] call EFUNC(common,execRemoteFnc);
};

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="Interaction">
<Key ID="STR_ACE_Respawn_Deploy">
@ -66,7 +65,7 @@
<English>Rallypoint Independent (Base)</English>
<German>Sammelpunkt Widerstand (Basis)</German>
<Spanish>Punto de reunión Independiente (Base)</Spanish>
<Russian>Точка сбора Независимых (База</Russian>
<Russian>Точка сбора Независимых (База)</Russian>
<Polish>Punkt zbiórki Ruchu oporu (Baza)</Polish>
<French>Point de ralliement Indépendant (Base)</French>
</Key>
@ -95,4 +94,4 @@
<French>Point de ralliement Indépendant</French>
</Key>
</Package>
</Project>
</Project>

View File

@ -8,6 +8,7 @@
<Spanish>Ajuste menor arriba</Spanish>
<Italian>Regola leggermente alzata in alto</Italian>
<French>Hausse +</French>
<German>Kleine Korrektur nach oben</German>
</Key>
<Key ID="STR_ACE_Scopes_AdjustDownMinor">
<English>Minor adjustment down</English>
@ -16,6 +17,7 @@
<Spanish>Ajuste menor abajo</Spanish>
<Italian>Regola leggermente alzata in basso</Italian>
<French>Hausse -</French>
<German>Kleine Korrektur nach unten</German>
</Key>
<Key ID="STR_ACE_Scopes_AdjustRightMinor">
<English>Minor adjustment right</English>
@ -24,6 +26,7 @@
<Spanish>Ajuste menor derecha</Spanish>
<Italian>Regola leggermente il tiro a destra</Italian>
<French>Dérive +</French>
<German>Kleine Korrektur nach rechts</German>
</Key>
<Key ID="STR_ACE_Scopes_AdjustLeftMinor">
<English>Minor adjustment left</English>
@ -32,6 +35,7 @@
<Spanish>Ajuste menor izquierda</Spanish>
<Italian>Regola leggermete il tiro a sinistra</Italian>
<French>Dérive -</French>
<German>Kleine Korrektur nach links</German>
</Key>
<Key ID="STR_ACE_Scopes_AdjustUpMajor">
<English>Major adjustment up</English>
@ -40,6 +44,7 @@
<Spanish>Ajuste mayor arriba</Spanish>
<Italian>Regola l'alzata in alto</Italian>
<French>Hausse +++</French>
<German>Große Korrektur nach oben</German>
</Key>
<Key ID="STR_ACE_Scopes_AdjustDownMajor">
<English>Major adjustment down</English>
@ -48,6 +53,7 @@
<Spanish>Ajuste mayor abajo</Spanish>
<Italian>Regola l'alzata in basso</Italian>
<French>Hausse ---</French>
<German>Große Korrektur nach unten</German>
</Key>
<Key ID="STR_ACE_Scopes_AdjustRightMajor">
<English>Major adjustment right</English>
@ -56,6 +62,7 @@
<Spanish>Ajuste mayor derecha</Spanish>
<Italian>Regola il tiro a destra</Italian>
<French>Dérive +++</French>
<German>Große Korrektur nach rechts</German>
</Key>
<Key ID="STR_ACE_Scopes_AdjustLeftMajor">
<English>Major adjustment left</English>
@ -64,6 +71,7 @@
<Spanish>Ajuste mayor izquierda</Spanish>
<Italian>Regola il tiro a sinistra</Italian>
<French>Dérive ---</French>
<German>Große Korrektur nach links</German>
</Key>
<Key ID="STR_ACE_Scopes_AdjustZero">
<English>Set zero adjustment</English>
@ -72,6 +80,7 @@
<Spanish>Establecer ajuste a cero</Spanish>
<Italian>Resetta i valori del tiro</Italian>
<French>RAZ corrections</French>
<German>Auf 0 justieren</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -41,7 +41,7 @@
<Spanish>Seleccionar fusil</Spanish>
<Polish>Wybierz karabin</Polish>
<Czech>Zvolit hlavní zbraň</Czech>
<Russian>Выбрать автомат</Russian>
<Russian>Выбрать винтовку</Russian>
<French>Sélectionner Fusil</French>
<Hungarian>Puska Kiválasztása</Hungarian>
<Portuguese>Selecionar Rifle</Portuguese>
@ -246,7 +246,7 @@
<Czech>Už nejsou žádné ostatní granáty</Czech>
<Portuguese>Não há outras granadas restantes</Portuguese>
<Italian>Nessun'altra granata rimanente.</Italian>
<Russian>Летальные гранаты закончились</Russian>
<Russian>Нелетальные гранаты закончились</Russian>
</Key>
<Key ID="STR_ACE_WeaponSelect_NoGrenadeSelected">
<English>No grenade selected</English>
@ -268,8 +268,8 @@
<French>Tirer le lance-pots fumigènes</French>
<Polish>Wystrzel granat dymny</Polish>
<Hungarian>Füstvető eltüzelése</Hungarian>
<Russian>Запустить дымовую завесу</Russian>
<Russian>Пустить дымовую завесу</Russian>
<Italian>Lancia fumogeno</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,6 +1,36 @@
//XEH_postInit.sqf
//#define DEBUG_MODE_FULL
#include "script_component.hpp"
// Rain variables
GVAR(enableRain) = true;
GVAR(rain_next_period) = -1;
GVAR(rain_period_count) = 0;
GVAR(rain_initial_rain) = 0;
if(overcast >= 0.7) then {
GVAR(rain_initial_rain) = (random ((overcast-0.7)/0.3));
};
GVAR(current_rain) = GVAR(rain_initial_rain);
GVAR(rain_current_range) = -1+(random 2);
GVAR(overcast_multiplier) = 1;
// Wind Variables
ACE_wind = [0, 0, 0];
GVAR(wind_initial_dir) = (random 360);
GVAR(wind_initial_speed) = (overcast*5)+(random (overcast*5)) max 1;
GVAR(wind_mean_speed) = GVAR(wind_initial_speed);
GVAR(wind_mean_dir) = GVAR(wind_initial_dir);
GVAR(wind_current_speed) = GVAR(wind_initial_speed);
GVAR(wind_current_dir) = GVAR(wind_initial_dir);
GVAR(wind_current_range_speed) = -1+(random 2);
GVAR(wind_current_range_dir) = -1+(random 2);
GVAR(wind_next_period) = -1; //ceil((2+random(5))/(GVAR(overcast_multiplier)/10));
GVAR(wind_next_major_period) = -1;
GVAR(wind_period_count) = 0;
GVAR(wind_major_period_count) = 0;
GVAR(wind_total_time) = 0;
GVAR(wind_period_start_time) = time;
call FUNC(getMapData);
"ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; };
"ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; };
"ACE_MISC_PARAMS" addPublicVariableEventHandler {
@ -22,66 +52,9 @@
{false},
[37, [true, false, false]], false, 0] call CBA_fnc_addKeybind; // (SHIFT + K)
// Update Wind
simulWeatherSync;
_fnc_updateWind = {
ACE_wind = [] call FUNC(getWind);
setWind [ACE_wind select 0, ACE_wind select 1, true];
2 setGusts 0;
// Set waves: 0 when no wind, 1 when wind >= 16 m/s
1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0);
//systemChat format ["w:%1 %2,ACE_w:%1 %2, w", [wind select 0, wind select 1, ACE_wind select 0, ACE_wind select 1]];
};
[_fnc_updateWind, 1, []] call CBA_fnc_addPerFrameHandler;
// Update Rain
_fnc_updateRain = {
private ["_oldStrength","_rainStrength","_transitionTime","_periodPosition","_periodPercent"];
if(GVAR(enableRain)) then {
if(!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then {
_oldStrength = ACE_RAIN_PARAMS select 0;
_rainStrength = ACE_RAIN_PARAMS select 1;
_transitionTime = ACE_RAIN_PARAMS select 2;
_periodPosition = (time - GVAR(rain_period_start_time)) min _transitionTime;
_periodPercent = (_periodPosition/_transitionTime) min 1;
0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength);
};
};
};
[_fnc_updateRain, 2, []] call CBA_fnc_addPerFrameHandler;
// Update Temperature
_fnc_updateTemperature = {
private ["_time","_month","_hourlyCoef","_avgTemperature","_pS1","_pS2"];
_time = daytime;
_month = date select 1;
// Temperature
_hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440));
GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef;
GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * humidity - 4 * overcast;
GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10;
// Humidity
GVAR(currentHumidity) = (GVAR(Humidity) select _month) / 100;
if (rain > 0 && overcast > 0.7) then {
GVAR(currentHumidity) = 1;
} else {
_avgTemperature = ((GVAR(TempDay) select (_month - 1)) + (GVAR(TempNight) select (_month - 1))) / 2;
_pS1 = 6.112 * exp((17.62 * _avgTemperature) / (243.12 + _avgTemperature));
_PS2 = 6.112 * exp((17.62 * GVAR(currentTemperature)) / (243.12 + GVAR(currentTemperature)));
GVAR(currentHumidity) = GVAR(currentHumidity) * _PS1 / _PS2;
};
GVAR(currentHumidity) = 0 max GVAR(currentHumidity) min 1;
// @todo: take altitude and humidity into account
GVAR(currentRelativeDensity) = (273.15 + 20) / (273.15 + GVAR(currentTemperature));
};
[_fnc_updateTemperature, 20, []] call CBA_fnc_addPerFrameHandler;
[FUNC(updateTemperature), 20, []] call CBA_fnc_addPerFrameHandler;
[FUNC(updateHumidity), 20, []] call CBA_fnc_addPerFrameHandler;
[FUNC(updateWind), 1, []] call CBA_fnc_addPerFrameHandler;
[FUNC(updateRain), 2, []] call CBA_fnc_addPerFrameHandler;

View File

@ -2,44 +2,16 @@
#include "script_component.hpp"
ADDON = false;
LOG(MSG_INIT);
PREP(calculateAirDensity);
PREP(calculateBarometricPressure);
PREP(displayWindInfo);
PREP(getMapData);
PREP(getWind);
PREP(serverController);
// Rain variables
GVAR(enableRain) = true;
GVAR(rain_next_period) = -1;
GVAR(rain_period_count) = 0;
GVAR(rain_initial_rain) = 0;
if(overcast >= 0.7) then {
GVAR(rain_initial_rain) = (random ((overcast-0.7)/0.3));
};
GVAR(current_rain) = GVAR(rain_initial_rain);
GVAR(rain_current_range) = -1+(random 2);
GVAR(overcast_multiplier) = 1;
// Wind Variables
ACE_wind = [0, 0, 0];
GVAR(wind_initial_dir) = (random 360);
GVAR(wind_initial_speed) = (overcast*5)+(random (overcast*5)) max 1;
GVAR(wind_mean_speed) = GVAR(wind_initial_speed);
GVAR(wind_mean_dir) = GVAR(wind_initial_dir);
GVAR(wind_current_speed) = GVAR(wind_initial_speed);
GVAR(wind_current_dir) = GVAR(wind_initial_dir);
GVAR(wind_current_range_speed) = -1+(random 2);
GVAR(wind_current_range_dir) = -1+(random 2);
GVAR(wind_next_period) = -1; //ceil((2+random(5))/(GVAR(overcast_multiplier)/10));
GVAR(wind_next_major_period) = -1;
GVAR(wind_period_count) = 0;
GVAR(wind_major_period_count) = 0;
GVAR(wind_total_time) = 0;
GVAR(wind_period_start_time) = time;
// Init weather variables, in case they are needed before postInit
call FUNC(getMapData);
PREP(updateHumidity);
PREP(updateRain);
PREP(updateTemperature);
PREP(updateWind);
ADDON = true;

View File

@ -0,0 +1,36 @@
/*
* Author: Ruthberg
*
* Calculates the air density
*
* Arguments:
* 0: temperature - degrees celcius <NUMBER>
* 1: pressure - hPa <NUMBER>
* 2: relativeHumidity - value between 0.0 and 1.0 <NUMBER>
*
* Return Value:
* 0: density of air - kg * m^(-3) <NUMBER>
*
* Return value:
* None
*/
#include "script_component.hpp"
private ["_temperature", "_pressure", "_relativeHumidity"];
_temperature = _this select 0; // in C
_pressure = _this select 1; // in hPa
_relativeHumidity = _this select 2; // as ratio 0-1
_pressure = _pressure * 100;
if (_relativeHumidity > 0) then {
private ["_pSat", "_vaporPressure", "_partialPressure"];
// Saturation vapor pressure calculated according to: http://wahiduddin.net/calc/density_algorithms.htm
_pSat = 6.1078 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3));
_vaporPressure = _relativeHumidity * _pSat;
_partialPressure = _pressure - _vaporPressure;
(_partialPressure * DRY_AIR_MOLAR_MASS + _vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(_temperature))
} else {
_pressure / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(_temperature))
};

View File

@ -0,0 +1,20 @@
/*
* Author: Ruthberg
*
* Calculates the barometric pressure based on altitude and weather
*
* Arguments:
* 0: altitude - meters <NUMBER>
*
* Return Value:
* 0: barometric pressure - hPA <NUMBER>
*
* Return value:
* None
*/
#include "script_component.hpp"
private ["_altitude"];
_altitude = _this;
(1013.25 * exp(-(GVAR(Altitude) + _altitude) / 7990) - 10 * overcast)

View File

@ -1,5 +1,6 @@
/*
* Author: Ruthberg
*
* Displays a wind info (colored arrow) in the top left corner of the screen
*
* Argument:

View File

@ -1,5 +1,6 @@
/*
* Author: Ruthberg, esteldunedain
*
* Get the weather data for the current map
*
* Argument:
@ -109,3 +110,6 @@ if (worldName in ["Imrali"]) exitWith {
GVAR(TempDay) = [1, 3, 9, 14, 19, 23, 25, 24, 21, 13, 7, 2];
GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2];
GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82];
GVAR(currentTemperature) = 20;
GVAR(currentHumidity) = 0.5;

View File

@ -1,5 +1,6 @@
/*
* Author: ACE2 Team
*
* Calculate current wind locally from the data broadcasted by the server
*
* Argument:

View File

@ -1,5 +1,6 @@
/*
* Author: ACE2 Team, esteldunedain
*
* Calculate the wind and rain evolution on the server. Broadcast the current and next values to the clients
*
* Argument:

View File

@ -0,0 +1,28 @@
/*
* Author: ACE2 Team
*
* Updates GVAR(currentHumidity) based on
*
* Argument:
* Nothing
*
* Return value:
* Nothing
*/
#include "script_component.hpp"
private ["_month", "_avgTemperature", "_pS1", "_pS2"];
_month = date select 1;
GVAR(currentHumidity) = (GVAR(Humidity) select _month) / 100;
if (rain > 0 && overcast > 0.7) then {
GVAR(currentHumidity) = 1;
} else {
_avgTemperature = ((GVAR(TempDay) select (_month - 1)) + (GVAR(TempNight) select (_month - 1))) / 2;
_pS1 = 6.112 * exp((17.62 * _avgTemperature) / (243.12 + _avgTemperature));
_PS2 = 6.112 * exp((17.62 * GVAR(currentTemperature)) / (243.12 + GVAR(currentTemperature)));
GVAR(currentHumidity) = GVAR(currentHumidity) * _PS1 / _PS2;
};
GVAR(currentHumidity) = 0 max GVAR(currentHumidity) min 1;

View File

@ -0,0 +1,26 @@
/*
* Author: ACE2 Team
*
* Updates rain based on ACE_RAIN_PARAMS
*
* Argument:
* Nothing
*
* Return value:
* Nothing
*/
#include "script_component.hpp"
private ["_oldStrength", "_rainStrength", "_transitionTime", "_periodPosition", "_periodPercent"];
if (!GVAR(enableRain)) exitWith {};
if (!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then {
_oldStrength = ACE_RAIN_PARAMS select 0;
_rainStrength = ACE_RAIN_PARAMS select 1;
_transitionTime = ACE_RAIN_PARAMS select 2;
_periodPosition = (time - GVAR(rain_period_start_time)) min _transitionTime;
_periodPercent = (_periodPosition/_transitionTime) min 1;
0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength);
};

View File

@ -0,0 +1,22 @@
/*
* Author: ACE2 Team
*
* Updates GVAR(currentTemperature) based on the map data
*
* Argument:
* Nothing
*
* Return value:
* Nothing
*/
#include "script_component.hpp"
private ["_time", "_month", "_hourlyCoef"];
_time = daytime;
_month = date select 1;
_hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440));
GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef;
GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * humidity - 4 * overcast;
GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10;

View File

@ -0,0 +1,21 @@
/*
* Author: ACE2 Team
*
* Updates wind, gusts and waves based on ACE_wind
*
* Argument:
* Nothing
*
* Return value:
* Nothing
*/
#include "script_component.hpp"
ACE_wind = [] call FUNC(getWind);
setWind [ACE_wind select 0, ACE_wind select 1, true];
2 setGusts 0;
// Set waves: 0 when no wind, 1 when wind >= 16 m/s
1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0);
//hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000];

View File

@ -10,3 +10,11 @@
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#define ABSOLUTE_ZERO_IN_CELSIUS -273.15
#define KELVIN(t) (t - ABSOLUTE_ZERO_IN_CELSIUS)
#define CELSIUS(t) (t + ABSOLUTE_ZERO_IN_CELSIUS)
#define UNIVERSAL_GAS_CONSTANT 8.314
#define WATER_VAPOR_MOLAR_MASS 0.018016
#define DRY_AIR_MOLAR_MASS 0.028964
#define SPECIFIC_GAS_CONSTANT_DRY_AIR 287.058

View File

@ -4,10 +4,11 @@
<Key ID="STR_ACE_Weather_WindInfoKey">
<English>Show Wind Info</English>
<Polish>Pokaż inf. o wietrze</Polish>
<Russian>Показать информацию о погоде</Russian>
<Russian>Показать информацию о ветре</Russian>
<French>Afficher information sur le vent</French>
<Spanish>Mostrar información del viento</Spanish>
<Italian>Mostra informazioni sul vento</Italian>
<German>Zeige Windinformationen</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -6,7 +6,7 @@
<English>Wind Information</English>
<Polish>Informacje o wietrze</Polish>
<Spanish>Información del viento</Spanish>
<Russian>Ветер</Russian>
<Russian>Информация о ветре</Russian>
<Czech>Informace o větru</Czech>
<French>Vent</French>
<German>Windinformationen</German>
@ -17,7 +17,7 @@
<English>Direction: %1</English>
<Polish>Kierunek: %1</Polish>
<Spanish>Dirección: %1</Spanish>
<Russian>Направление: %1</Russian>
<Russian>Направление: %1°</Russian>
<Czech>Směr: %1</Czech>
<French>Direction %1</French>
<German>Windrichtung: %1</German>
@ -39,7 +39,7 @@
<English>Weather Information</English>
<Polish>Informacje o pogodzie</Polish>
<Spanish>Información Meteorológica</Spanish>
<Russian>Погода</Russian>
<Russian>Информация о погоде</Russian>
<Czech>Informace o počasí</Czech>
<French>Météo</French>
<German>Wetterinformationen</German>

View File

@ -0,0 +1,36 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"asdg_jointrails","ace_laserpointer","ace_optics"};
author[]={"OnkelDisMaster"};
authorUrl = "http://2.xn--gebirgsjgerkompanie-nwb.de/";
VERSION_CONFIG;
};
};
class asdg_SlotInfo;
class asdg_FrontSideRail: asdg_SlotInfo {
class compatibleItems {
ACE_acc_pointer_red = 1;
ACE_acc_pointer_green = 1;
};
};
class asdg_OpticRail;
class asdg_OpticRail1913: asdg_OpticRail {
class compatibleItems {
ACE_optic_Hamr_2D = 1;
ACE_optic_Hamr_PIP = 1;
ACE_optic_Arco_2D = 1;
ACE_optic_Arco_PIP = 1;
ACE_optic_MRCO_2D = 1;
ACE_optic_SOS_2D = 1;
ACE_optic_SOS_PIP = 1;
ACE_optic_LRPS_2D = 1;
ACE_optic_LRPS_PIP = 1;
};
};

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