mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' into curatorFragmentation
This commit is contained in:
commit
59bdc23a95
2
LICENSE
2
LICENSE
@ -1,4 +1,4 @@
|
||||
Copyright (C) 2014 Felix "KoffeinFlummi" Wiegand
|
||||
Copyright (C) 2015 Felix "KoffeinFlummi" Wiegand
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
Binary file not shown.
Binary file not shown.
BIN
ace_fcs.dll
BIN
ace_fcs.dll
Binary file not shown.
@ -20,19 +20,11 @@ GVAR(WindInfoStart) = time;
|
||||
GVAR(Protractor) = false;
|
||||
GVAR(ProtractorStart) = time;
|
||||
|
||||
// Those are only used in the pure sqf version (extension free PFH)
|
||||
GVAR(SimulationPrecision) = 2;
|
||||
GVAR(WindEnabled) = true;
|
||||
GVAR(SpinDriftEnabled) = true;
|
||||
GVAR(CoriolisEnabled) = true;
|
||||
GVAR(EoetvoesEnabled) = true;
|
||||
GVAR(AdvancedAirDragEnabled) = true;
|
||||
GVAR(TransonicRegionEnabled) = true;
|
||||
GVAR(AtmosphericDensitySimulationEnabled) = true;
|
||||
|
||||
GVAR(currentGrid) = 0;
|
||||
GVAR(INIT_MESSAGE_ENABLED) = false;
|
||||
|
||||
GVAR(extensionAvailable) = true;
|
||||
/* @TODO: Remove this until verisoning is in sync with cmake/build versioning
|
||||
GVAR(extensionVersion) = ("ace_advanced_ballistics" callExtension "version");
|
||||
GVAR(extensionAvailable) = (GVAR(extensionVersion) == EXTENSION_REQUIRED_VERSION);
|
||||
if (!GVAR(extensionAvailable)) exitWith {
|
||||
@ -42,5 +34,5 @@ if (!GVAR(extensionAvailable)) exitWith {
|
||||
diag_log text "[ACE] ERROR: ace_advanced_ballistics.dll is incompatible";
|
||||
};
|
||||
};
|
||||
|
||||
*/
|
||||
[] call FUNC(initializeTerrainExtension);
|
||||
|
@ -1,36 +0,0 @@
|
||||
/*
|
||||
* 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))
|
||||
};
|
@ -19,7 +19,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleAccessory", "_initSpeedCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_bulletWeight", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef"];
|
||||
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef", "_ballisticCoefficients", "_velocityBoundaries"];
|
||||
_unit = _this select 0;
|
||||
_weapon = _this select 1;
|
||||
_mode = _this select 3;
|
||||
@ -35,49 +35,34 @@ if (!([_unit] call EFUNC(common,isPlayer))) exitWith {};
|
||||
if (underwater _unit) exitWith {};
|
||||
if (!(_ammo isKindOf "BulletBase")) exitWith {};
|
||||
if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {};
|
||||
if (GVAR(onlyActiveForLocalPlayers) && _unit != ACE_player) then { _abort = true; };
|
||||
if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then {
|
||||
if (GVAR(alwaysSimulateForSnipers)) then {
|
||||
// The shooter is non local
|
||||
if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then {
|
||||
_opticsName = (primaryWeaponItems _unit) select 2;
|
||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_abort = _opticType != 2; // We only abort if the non local shooter is not a sniper
|
||||
};
|
||||
} else {
|
||||
_abort = true;
|
||||
};
|
||||
};
|
||||
//if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // TODO: We currently do not have firedEHs on vehicles
|
||||
if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; };
|
||||
|
||||
if (_abort && alwaysSimulateForSnipers) then {
|
||||
// The shooter is non local
|
||||
if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then {
|
||||
_opticsName = (primaryWeaponItems _unit) select 2;
|
||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_abort = _opticType != 2; // We only abort if the non local shooter is not a sniper
|
||||
};
|
||||
};
|
||||
if (_abort || !(GVAR(extensionAvailable))) exitWith {
|
||||
[_bullet, getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH);
|
||||
};
|
||||
|
||||
_airFriction = getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction");
|
||||
_muzzleVelocity = getNumber(configFile >> "cfgMagazines" >> _magazine >> "initSpeed");
|
||||
_muzzleVelocityCoef = getNumber(configFile >> "cfgWeapons" >> _weapon >> "initSpeed");
|
||||
if (_muzzleVelocityCoef > 0) then {
|
||||
_muzzleVelocity = _muzzleVelocityCoef;
|
||||
};
|
||||
if (_muzzleVelocityCoef < 0) then {
|
||||
_muzzleVelocity = _muzzleVelocity * (-1 * _muzzleVelocityCoef);
|
||||
};
|
||||
|
||||
_muzzleAccessory = "";
|
||||
switch (currentWeapon _unit) do {
|
||||
case primaryWeapon _unit: { _muzzleAccessory = (primaryWeaponItems _unit) select 0; };
|
||||
case handgunWeapon _unit: { _muzzleAccessory = (handgunItems _unit) select 0; };
|
||||
};
|
||||
|
||||
if (_muzzleAccessory != "" && isNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed")) then {
|
||||
_initSpeedCoef = getNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed");
|
||||
_muzzleVelocity = _muzzleVelocity * _initSpeedCoef;
|
||||
};
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_muzzleVelocity = vectorMagnitude _bulletVelocity;
|
||||
|
||||
if (GVAR(barrelLengthInfluenceEnabled)) then {
|
||||
_muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift);
|
||||
if (_muzzleVelocityShift != 0) then {
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||
};
|
||||
@ -87,19 +72,23 @@ if (GVAR(ammoTemperatureEnabled)) then {
|
||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
||||
_muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
|
||||
if (_muzzleVelocityShift != 0) then {
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||
};
|
||||
};
|
||||
|
||||
_bulletTraceVisible = false;
|
||||
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER" && currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
||||
_opticsName = (primaryWeaponItems ACE_player) select 2;
|
||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_bulletTraceVisible = (_opticType == 2 || currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]);
|
||||
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER") then {
|
||||
if (currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]) then {
|
||||
_bulletTraceVisible = true;
|
||||
} else {
|
||||
if (currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
||||
_opticsName = (primaryWeaponItems ACE_player) select 2;
|
||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_bulletTraceVisible = _opticType == 2;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
_caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber");
|
||||
@ -131,253 +120,47 @@ _dragModel = 1;
|
||||
_ballisticCoefficients = [];
|
||||
_velocityBoundaries = [];
|
||||
_atmosphereModel = "ICAO";
|
||||
if (GVAR(AdvancedAirDragEnabled)) then {
|
||||
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then {
|
||||
_dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel");
|
||||
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
||||
_dragModel = 1;
|
||||
};
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then {
|
||||
_ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients");
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then {
|
||||
_velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries");
|
||||
};
|
||||
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
||||
_atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
||||
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then {
|
||||
_dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel");
|
||||
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
||||
_dragModel = 1;
|
||||
};
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then {
|
||||
_ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients");
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then {
|
||||
_velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries");
|
||||
};
|
||||
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
||||
_atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
||||
};
|
||||
|
||||
#ifdef USE_ADVANCEDBALLISTICS_DLL
|
||||
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||
|
||||
[{
|
||||
private ["_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||
EXPLODE_4_PVT(_this select 0,_bullet,_caliber,_bulletTraceVisible,_index);
|
||||
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletPosition = getPosASL _bullet;
|
||||
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
|
||||
if (!alive _bullet || _bulletSpeed < 100) exitWith {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
if (_bulletTraceVisible && _bulletSpeed > 600) then {
|
||||
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
||||
};
|
||||
|
||||
call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]);
|
||||
|
||||
}, GVAR(simulationInterval), [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]] call CBA_fnc_addPerFrameHandler;
|
||||
#else
|
||||
_index = count GVAR(bulletDatabase);
|
||||
if (count GVAR(bulletDatabaseFreeIndices) > 0) then {
|
||||
_index = GVAR(bulletDatabaseFreeIndices) select 0;
|
||||
GVAR(bulletDatabaseFreeIndices) = GVAR(bulletDatabaseFreeIndices) - [_index];
|
||||
[{
|
||||
private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||
_args = _this select 0;
|
||||
_bullet = _args select 0;
|
||||
_caliber = _args select 1;
|
||||
_bulletTraceVisible = _args select 2;
|
||||
_index = _args select 3;
|
||||
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletPosition = getPosASL _bullet;
|
||||
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
|
||||
if (!alive _bullet || _bulletSpeed < 100) exitWith {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
if (_bulletTraceVisible && _bulletSpeed > 600) then {
|
||||
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
||||
};
|
||||
|
||||
GVAR(bulletDatabase) set[_index, [_bullet, _caliber, _airFriction, _muzzleVelocity, _stabilityFactor, _transonicStabilityCoef, _twistDirection, _unit, _bulletTraceVisible, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _index]];
|
||||
GVAR(bulletDatabaseStartTime) set[_index, time];
|
||||
GVAR(bulletDatabaseSpeed) set[_index, 0];
|
||||
GVAR(bulletDatabaseFrames) set[_index, 1];
|
||||
GVAR(bulletDatabaseLastFrame) set[_index, time];
|
||||
GVAR(bulletDatabaseHDeflect) set[_index, 0];
|
||||
GVAR(bulletDatabaseSpinDrift) set[_index, 0];
|
||||
call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]);
|
||||
|
||||
if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then {
|
||||
[{
|
||||
private ["_bulletDatabaseEntry", "_bullet", "_caliber", "_muzzleVelocity", "_frames", "_speed", "_airFriction", "_airFrictionRef", "_dragModel", "_atmosphereModel", "_ballisticCoefficient", "_ballisticCoefficients", "_velocityBoundaries", "_airDensity", "_stabilityFactor", "_transonicStabilityCoef", "_twistDirection", "_unit", "_bulletTraceVisible", "_index", "_temperature", "_humidity", "_deltaT", "_TOF", "_bulletPosition", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_bulletSpeedAvg", "_wind", "_drag", "_dragRef", "_vect", "_accel", "_accelRef", "_centripetalAccel", "_pressure", "_pressureDeviation", "_windSourceObstacle", "_windSourceTerrain", "_height", "_roughnessLength", "_bulletDir", "_horizontalDeflection", "_horizontalDeflectionPartial", "_spinDrift", "_spinDriftPartial"];
|
||||
|
||||
{
|
||||
_bulletDatabaseEntry = (GVAR(bulletDatabase) select _x);
|
||||
if (!alive (_bulletDatabaseEntry select 0)) then {
|
||||
_index = _bulletDatabaseEntry select 13;
|
||||
GVAR(bulletDatabaseOccupiedIndices) = GVAR(bulletDatabaseOccupiedIndices) - [_index];
|
||||
GVAR(bulletDatabaseFreeIndices) pushBack _index;
|
||||
};
|
||||
true
|
||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
||||
|
||||
if (count GVAR(bulletDatabaseOccupiedIndices) == 0) exitWith {
|
||||
GVAR(bulletDatabase) = [];
|
||||
GVAR(bulletDatabaseStartTime) = [];
|
||||
GVAR(bulletDatabaseSpeed) = [];
|
||||
GVAR(bulletDatabaseFrames) = [];
|
||||
GVAR(bulletDatabaseLastFrame) = [];
|
||||
GVAR(bulletDatabaseHDeflect) = [];
|
||||
GVAR(bulletDatabaseSpinDrift) = [];
|
||||
GVAR(bulletDatabaseOccupiedIndices) = [];
|
||||
GVAR(bulletDatabaseFreeIndices) = [];
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
{
|
||||
_bulletDatabaseEntry = GVAR(bulletDatabase) select _x;
|
||||
_bullet = _bulletDatabaseEntry select 0;
|
||||
_caliber = _bulletDatabaseEntry select 1;
|
||||
_airFriction = _bulletDatabaseEntry select 2;
|
||||
_muzzleVelocity = _bulletDatabaseEntry select 3;
|
||||
_stabilityFactor = _bulletDatabaseEntry select 4;
|
||||
_transonicStabilityCoef = _bulletDatabaseEntry select 5;
|
||||
_twistDirection = _bulletDatabaseEntry select 6;
|
||||
_unit = _bulletDatabaseEntry select 7;
|
||||
_bulletTraceVisible = _bulletDatabaseEntry select 8;
|
||||
_ballisticCoefficients = _bulletDatabaseEntry select 9;
|
||||
_velocityBoundaries = _bulletDatabaseEntry select 10;
|
||||
_atmosphereModel = _bulletDatabaseEntry select 11;
|
||||
_dragModel = _bulletDatabaseEntry select 12;
|
||||
_index = _bulletDatabaseEntry select 13;
|
||||
|
||||
_TOF = time - (GVAR(bulletDatabaseStartTime) select _index);
|
||||
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletPosition = getPosASL _bullet;
|
||||
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
_bulletDir = (_bulletVelocity select 0) atan2 (_bulletVelocity select 1);
|
||||
|
||||
_speed = (GVAR(bulletDatabaseSpeed) select _index);
|
||||
GVAR(bulletDatabaseSpeed) set[_index, _speed + _bulletSpeed];
|
||||
|
||||
_frames = (GVAR(bulletDatabaseFrames) select _index);
|
||||
GVAR(bulletDatabaseFrames) set[_index, _frames + 1];
|
||||
|
||||
_bulletSpeedAvg = (_speed / _frames);
|
||||
|
||||
if ((GVAR(SimulationPrecision) < 2) || {_frames % GVAR(SimulationPrecision) == _index % GVAR(SimulationPrecision)}) then {
|
||||
_deltaT = time - (GVAR(bulletDatabaseLastFrame) select _index);
|
||||
GVAR(bulletDatabaseLastFrame) set[_index, time];
|
||||
|
||||
_trueVelocity = _bulletVelocity;
|
||||
_trueSpeed = _bulletSpeed;
|
||||
_wind = [0, 0, 0];
|
||||
if (GVAR(WindEnabled) && (vectorMagnitude ACE_wind) > 0) then {
|
||||
_windSourceObstacle = _bulletPosition vectorDiff ((vectorNormalized ACE_wind) vectorMultiply 10);
|
||||
_windSourceTerrain = _bulletPosition vectorDiff ((vectorNormalized ACE_wind) vectorMultiply 100);
|
||||
|
||||
if (!(lineIntersects [_bulletPosition, _windSourceObstacle]) && !(terrainIntersectASL [_bulletPosition, _windSourceTerrain])) then {
|
||||
_wind = ACE_wind;
|
||||
_height = ASLToATL(_bulletPosition) select 2;
|
||||
_height = 0 max _height min 20;
|
||||
if (_height < 20) then {
|
||||
_roughnessLength = _bulletPosition call FUNC(calculateRoughnessLength);
|
||||
_wind = _wind vectorMultiply (ln(_height / _roughnessLength) / ln(20 / _roughnessLength));
|
||||
};
|
||||
|
||||
_trueVelocity = _bulletVelocity vectorDiff _wind;
|
||||
_trueSpeed = vectorMagnitude _trueVelocity;
|
||||
};
|
||||
};
|
||||
|
||||
_airFrictionRef = _airFriction;
|
||||
if (GVAR(AdvancedAirDragEnabled) && (count _ballisticCoefficients) == (count _velocityBoundaries) + 1) then {
|
||||
_dragRef = _deltaT * _airFrictionRef * _bulletSpeed * _bulletSpeed;
|
||||
_accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef);
|
||||
_bulletVelocity = _bulletVelocity vectorDiff _accelRef;
|
||||
|
||||
_ballisticCoefficient = (_ballisticCoefficients select 0);
|
||||
for "_i" from (count _velocityBoundaries) - 1 to 0 step -1 do {
|
||||
if (_bulletSpeed < (_velocityBoundaries select _i)) exitWith {
|
||||
_ballisticCoefficient = (_ballisticCoefficients select (_i + 1));
|
||||
};
|
||||
};
|
||||
|
||||
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
|
||||
_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;
|
||||
if (_humidity > 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 = _humidity * _pSat;
|
||||
_partialPressure = (_pressure * 100)- _vaporPressure;
|
||||
|
||||
_airDensity = (_partialPressure * DRY_AIR_MOLAR_MASS + _vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(_temperature));
|
||||
} else {
|
||||
_airDensity = (_pressure * 100) / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(_temperature));
|
||||
};
|
||||
if (_atmosphereModel == "ICAO") then {
|
||||
_ballisticCoefficient = (STD_AIR_DENSITY_ICAO / _airDensity) * _ballisticCoefficient;
|
||||
} else {
|
||||
_ballisticCoefficient = (STD_AIR_DENSITY_ASM / _airDensity) * _ballisticCoefficient;
|
||||
};
|
||||
};
|
||||
|
||||
_drag = _deltaT * ([_dragModel, _ballisticCoefficient, _trueSpeed] call FUNC(calculateRetardation));
|
||||
_accel = (vectorNormalized _trueVelocity) vectorMultiply (_drag);
|
||||
_bulletVelocity = _bulletVelocity vectorDiff _accel;
|
||||
} else {
|
||||
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
|
||||
_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);
|
||||
};
|
||||
|
||||
if (_airFriction != _airFrictionRef || vectorMagnitude _wind > 0) then {
|
||||
_dragRef = _deltaT * _airFrictionRef * _bulletSpeed * _bulletSpeed;
|
||||
_accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef);
|
||||
_bulletVelocity = _bulletVelocity vectorDiff _accelRef;
|
||||
|
||||
_drag = _deltaT * _airFriction * _trueSpeed * _trueSpeed;
|
||||
_accel = (vectorNormalized _trueVelocity) vectorMultiply (_drag);
|
||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
||||
};
|
||||
};
|
||||
|
||||
if (GVAR(CoriolisEnabled) && _bulletSpeedAvg > 0) then {
|
||||
_horizontalDeflection = 0.0000729 * (_unit distanceSqr _bullet) * sin(EGVAR(weather,Latitude)) / _bulletSpeedAvg;
|
||||
_horizontalDeflectionPartial = _horizontalDeflection - (GVAR(bulletDatabaseHDeflect) select _index);
|
||||
GVAR(bulletDatabaseHDeflect) set[_index, _horizontalDeflection];
|
||||
_vect = [sin(_bulletDir + 90) * _horizontalDeflectionPartial, cos(_bulletDir + 90) * _horizontalDeflectionPartial, 0];
|
||||
|
||||
_bulletPosition = _bulletPosition vectorAdd _vect;
|
||||
};
|
||||
|
||||
/*
|
||||
// Negligible effect on the trajectory
|
||||
if (GVAR(EoetvoesEnabled)) then {
|
||||
_centripetalAccel = 2 * 0.0000729 * (_muzzleVelocity / -32.2) * cos(EGVAR(weather,Latitude)) * sin(_bulletDir);
|
||||
_accel = [0, 0, -(_centripetalAccel * _deltaT)];
|
||||
|
||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
||||
};
|
||||
//*/
|
||||
|
||||
if (GVAR(SpinDriftEnabled)) then {
|
||||
_spinDrift = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
||||
_spinDriftPartial = _spinDrift - (GVAR(bulletDatabaseSpinDrift) select _index);
|
||||
GVAR(bulletDatabaseSpinDrift) set[_index, _spinDrift];
|
||||
_vect = [sin(_bulletDir + 90) * _spinDriftPartial, cos(_bulletDir + 90) * _spinDriftPartial, 0];
|
||||
|
||||
_bulletPosition = _bulletPosition vectorAdd _vect;
|
||||
};
|
||||
};
|
||||
|
||||
if (GVAR(TransonicRegionEnabled) && _transonicStabilityCoef < 1) then {
|
||||
if (_bulletSpeed < 345 && _bulletSpeedAvg > 340 && _bulletSpeed > 335) then {
|
||||
_accel = [(random 0.8) - 0.4, (random 0.8) - 0.4, (random 0.8) - 0.4];
|
||||
_accel = _accel vectorMultiply (1 - _transonicStabilityCoef);
|
||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
||||
};
|
||||
};
|
||||
|
||||
if (_bulletTraceVisible && _bulletSpeed > 600 && _bullet distanceSqr _unit > 400) then {
|
||||
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
||||
};
|
||||
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
_bullet setPosASL _bulletPosition;
|
||||
true
|
||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
||||
|
||||
}, GVAR(simulationInterval), []] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
||||
#endif
|
||||
}, GVAR(simulationInterval), [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]] call CBA_fnc_addPerFrameHandler;
|
||||
|
@ -1,8 +1,6 @@
|
||||
#define COMPONENT advanced_ballistics
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
#define USE_ADVANCEDBALLISTICS_DLL
|
||||
|
||||
#ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -891,6 +891,25 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
|
||||
|
||||
class OpticsIn
|
||||
{
|
||||
class WideUnstabalized
|
||||
{
|
||||
opticsDisplayName = "WU";
|
||||
initAngleX = 0;
|
||||
minAngleX = -35;
|
||||
maxAngleX = 10;
|
||||
initAngleY = 0;
|
||||
minAngleY = -100;
|
||||
maxAngleY = 100;
|
||||
initFov = 0.466;
|
||||
minFov = 0.466;
|
||||
maxFov = 0.466;
|
||||
visionMode[] = {"Normal","Ti"};
|
||||
thermalMode[] = {0,1};
|
||||
gunnerOpticsColor[] = {0,0,0,1};
|
||||
directionStabilized = 0;
|
||||
horizontallyStabilized = 1;
|
||||
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F";
|
||||
};
|
||||
class Wide
|
||||
{
|
||||
opticsDisplayName = "W";
|
||||
|
@ -128,7 +128,7 @@ class ATragMX_RscListBox {
|
||||
class ATragMX_RscListNBox: ATragMX_RscListBox {
|
||||
idc=-1;
|
||||
type=102;
|
||||
columns[]={0.0, 0.225, 0.475, 0.725};
|
||||
columns[]={0.0, 0.225, 0.475, 0.7};
|
||||
drawSideArrows=0;
|
||||
idcLeft=-1;
|
||||
idcRight=-1;
|
||||
@ -523,9 +523,12 @@ class ATragMX_Display {
|
||||
x=0.550*safezoneW+safezoneX+0.32;
|
||||
text="Cur";
|
||||
};
|
||||
class TEXT_ELEVATION_OUTPUT_ABSOLUTE: ATragMX_RscEdit {
|
||||
class TEXT_ELEVATION_OUTPUT_ABSOLUTE: ATragMX_RscText {
|
||||
idc=400;
|
||||
w=0.07;
|
||||
style=160;
|
||||
sizeEx=0.025;
|
||||
w=0.065;
|
||||
h=0.032;
|
||||
x=0.550*safezoneW+safezoneX+0.17;
|
||||
y=0.265*safezoneH+safezoneY+0.50;
|
||||
text="";
|
||||
@ -537,7 +540,6 @@ class ATragMX_Display {
|
||||
class TEXT_ELEVATION_INPUT_CURRENT: TEXT_ELEVATION_OUTPUT_ABSOLUTE {
|
||||
idc=402;
|
||||
x=0.550*safezoneW+safezoneX+0.323;
|
||||
onKeyUp=QUOTE(if (_this select 1 == 28) then {call FUNC(parse_input); call FUNC(update_result)});
|
||||
};
|
||||
class TEXT_WINDAGE: TEXT_ELEVATION {
|
||||
idc=41;
|
||||
@ -555,7 +557,6 @@ class ATragMX_Display {
|
||||
class TEXT_WINDAGE_INPUT_CURRENT: TEXT_WINDAGE_OUTPUT_ABSOLUTE {
|
||||
idc=412;
|
||||
x=0.550*safezoneW+safezoneX+0.323;
|
||||
onKeyUp=QUOTE(if (_this select 1 == 28) then {call FUNC(parse_input); call FUNC(update_result)});
|
||||
};
|
||||
class TEXT_LEAD: TEXT_GUN {
|
||||
idc=42;
|
||||
@ -595,11 +596,20 @@ class ATragMX_Display {
|
||||
class TEXT_SCOPE_UNIT: TEXT_GUN_LIST {
|
||||
idc=2000;
|
||||
style=ST_CENTER;
|
||||
w=0.06;
|
||||
x=0.550*safezoneW+safezoneX+0.205;
|
||||
colorBackground[]={0,0,0,0};
|
||||
text="TMOA";
|
||||
action=QUOTE(call FUNC(cycle_scope_unit));
|
||||
};
|
||||
class TEXT_SCOPE_CLICK_NUMBER: TEXT_GUN_LIST {
|
||||
idc=2001;
|
||||
style=ST_CENTER;
|
||||
w=0.03;
|
||||
x=0.550*safezoneW+safezoneX+0.27;
|
||||
text="4";
|
||||
action=QUOTE(call FUNC(toggle_solution_setup));
|
||||
};
|
||||
class TEXT_CALCULATE: TEXT_SCOPE_UNIT {
|
||||
idc=3000;
|
||||
style=ST_RIGHT;
|
||||
@ -1213,7 +1223,10 @@ class ATragMX_Display {
|
||||
};
|
||||
class TEXT_ATMO_ENV_DATA_CALC_METHOD: TEXT_GUN_AMMO_DATA_BORE_HEIGHT {
|
||||
idc=13011;
|
||||
x=0.550*safezoneW+safezoneX+0.24;
|
||||
style=64;
|
||||
w=0.14;
|
||||
h=0.07;
|
||||
x=0.550*safezoneW+safezoneX+0.235;
|
||||
y=0.265*safezoneH+safezoneY+0.29;
|
||||
text="Calc Method";
|
||||
};
|
||||
@ -1325,6 +1338,16 @@ class ATragMX_Display {
|
||||
idc=140050;
|
||||
y=0.265*safezoneH+safezoneY+0.480;
|
||||
};
|
||||
class TEXT_TARGET_DATA_TARGET_SPEED_DIRECTION: ATragMX_RscButton {
|
||||
idc=140051;
|
||||
colorBackground[]={0.15,0.21,0.23,0.3};
|
||||
colorFocused[]={0.15,0.21,0.23,0.2};
|
||||
w=0.0231;
|
||||
x=0.550*safezoneW+safezoneX+0.305;
|
||||
y=0.265*safezoneH+safezoneY+0.480;
|
||||
text=">";
|
||||
action=QUOTE(call FUNC(cycle_target_speed_direction));
|
||||
};
|
||||
class TEXT_TARGET_DATA_TARGET_RANGE: TEXT_TARGET_DATA_LATITUDE {
|
||||
idc=14006;
|
||||
y=0.265*safezoneH+safezoneY+0.520;
|
||||
@ -1355,5 +1378,94 @@ class ATragMX_Display {
|
||||
class TEXT_TARGET_DATA_NEXT: TEXT_TARGET_SPEED_ASSIST_NEXT {
|
||||
idc=14011;
|
||||
};
|
||||
|
||||
class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN: TEXT_GUN_AMMO_DATA_BORE_HEIGHT {
|
||||
idc=15000;
|
||||
style=64;
|
||||
w=0.25;
|
||||
h=0.07;
|
||||
x=0.550*safezoneW+safezoneX+0.13;
|
||||
y=0.265*safezoneH+safezoneY+0.32;
|
||||
text="Show result in";
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1: TEXT_TARGET_A {
|
||||
idc=15001;
|
||||
w=0.04;
|
||||
x=0.550*safezoneW+safezoneX+0.14;
|
||||
y=0.265*safezoneH+safezoneY+0.35;
|
||||
text="1";
|
||||
action=QUOTE(GVAR(currentScopeClickNumberTemp) = 1; call FUNC(update_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_2: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 {
|
||||
idc=15002;
|
||||
x=0.550*safezoneW+safezoneX+0.18;
|
||||
text="2";
|
||||
action=QUOTE(GVAR(currentScopeClickNumberTemp) = 2; call FUNC(update_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_3: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 {
|
||||
idc=15003;
|
||||
x=0.550*safezoneW+safezoneX+0.22;
|
||||
text="3";
|
||||
action=QUOTE(GVAR(currentScopeClickNumberTemp) = 3; call FUNC(update_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_4: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 {
|
||||
idc=15004;
|
||||
x=0.550*safezoneW+safezoneX+0.26;
|
||||
text="4";
|
||||
action=QUOTE(GVAR(currentScopeClickNumberTemp) = 4; call FUNC(update_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_8: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 {
|
||||
idc=15005;
|
||||
x=0.550*safezoneW+safezoneX+0.30;
|
||||
text="8";
|
||||
action=QUOTE(GVAR(currentScopeClickNumberTemp) = 8; call FUNC(update_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_10: TEXT_SOLUTION_SETUP_SHOW_RESULT_IN_1 {
|
||||
idc=15006;
|
||||
x=0.550*safezoneW+safezoneX+0.34;
|
||||
text="10";
|
||||
action=QUOTE(GVAR(currentScopeClickNumberTemp) = 10; call FUNC(update_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_CLICKS_PER: TEXT_GUN_AMMO_DATA_BORE_HEIGHT {
|
||||
idc=15007;
|
||||
style=64;
|
||||
w=0.25;
|
||||
h=0.07;
|
||||
x=0.550*safezoneW+safezoneX+0.13;
|
||||
y=0.265*safezoneH+safezoneY+0.42;
|
||||
text="Clicks per";
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_CLICKS_PER_TMOA: TEXT_TARGET_A {
|
||||
idc=15008;
|
||||
w=0.05;
|
||||
x=0.550*safezoneW+safezoneX+0.15;
|
||||
y=0.265*safezoneH+safezoneY+0.45;
|
||||
text="TMOA";
|
||||
action=QUOTE(GVAR(currentScopeClickUnitTemp) = 0; call FUNC(update_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_CLICKS_PER_SMOA: TEXT_SOLUTION_SETUP_CLICKS_PER_TMOA {
|
||||
idc=15009;
|
||||
x=0.550*safezoneW+safezoneX+0.23;
|
||||
text="SMOA";
|
||||
action=QUOTE(GVAR(currentScopeClickUnitTemp) = 1; call FUNC(update_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_CLICKS_PER_MILS: TEXT_SOLUTION_SETUP_CLICKS_PER_TMOA {
|
||||
idc=15010;
|
||||
x=0.550*safezoneW+safezoneX+0.31;
|
||||
text="MILS";
|
||||
action=QUOTE(GVAR(currentScopeClickUnitTemp) = 2; call FUNC(update_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_DONE: TEXT_TARGET_SPEED_ASSIST_DONE {
|
||||
idc=15011;
|
||||
x=0.550*safezoneW+safezoneX+0.18;
|
||||
y=0.265*safezoneH+safezoneY+0.55;
|
||||
action=QUOTE(1 call FUNC(toggle_solution_setup));
|
||||
};
|
||||
class TEXT_SOLUTION_SETUP_CANCEL: TEXT_TARGET_SPEED_ASSIST_CANCEL {
|
||||
idc=15012;
|
||||
x=0.550*safezoneW+safezoneX+0.26;
|
||||
y=0.265*safezoneH+safezoneY+0.55;
|
||||
action=QUOTE(0 call FUNC(toggle_solution_setup));
|
||||
};
|
||||
};
|
||||
};
|
@ -9,7 +9,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
|
||||
GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006400, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ],
|
||||
|
||||
["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003740, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ],
|
||||
["12.7x99mm" , 853, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
|
||||
["12.7x99mm" , 900, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
|
||||
|
||||
["12.7x54mm" , 300, 100, 0.3395, -0.0001400, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ],
|
||||
|
||||
@ -34,6 +34,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
|
||||
|
||||
["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"],
|
||||
["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"],
|
||||
["6.5mm Creedmor" , 840, 100, 0.0637, -0.0006510, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"],
|
||||
|
||||
["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ],
|
||||
["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ],
|
||||
|
@ -20,6 +20,7 @@ PREP(cycle_num_ticks_units);
|
||||
PREP(cycle_range_card_columns);
|
||||
PREP(cycle_scope_unit);
|
||||
PREP(cycle_target_size_units);
|
||||
PREP(cycle_target_speed_direction);
|
||||
PREP(delete_gun);
|
||||
PREP(init);
|
||||
PREP(parse_input);
|
||||
@ -34,6 +35,7 @@ PREP(show_gun_list);
|
||||
PREP(show_main_page);
|
||||
PREP(show_range_card);
|
||||
PREP(show_range_card_setup);
|
||||
PREP(show_solution_setup);
|
||||
PREP(show_target_data);
|
||||
PREP(show_target_range_assist);
|
||||
PREP(show_target_speed_assist);
|
||||
@ -46,6 +48,7 @@ PREP(toggle_gun_ammo_data);
|
||||
PREP(toggle_gun_list);
|
||||
PREP(toggle_range_card);
|
||||
PREP(toggle_range_card_setup);
|
||||
PREP(toggle_solution_setup);
|
||||
PREP(toggle_target_data);
|
||||
PREP(toggle_target_range_assist);
|
||||
PREP(toggle_target_speed_assist);
|
||||
@ -59,6 +62,7 @@ PREP(update_range_card);
|
||||
PREP(update_relative_click_memory);
|
||||
PREP(update_result);
|
||||
PREP(update_scope_unit);
|
||||
PREP(update_solution_setup);
|
||||
PREP(update_target);
|
||||
PREP(update_target_data);
|
||||
PREP(update_target_selection);
|
||||
|
@ -19,7 +19,7 @@ private ["_gunName", "_gunProfileEntry"];
|
||||
|
||||
_gunName = ctrlText 11001;
|
||||
if (_gunName != "") then {
|
||||
_gunProfileEntry = [_gunName, 850, 500, 0.280, -0.0010000, 3.81, 0, 0.338, 0.338, 120, 0, 0, 9.460, "", "", 0.393, 1, "ICAO"];
|
||||
_gunProfileEntry = [_gunName, 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.393, 1, "ICAO"],
|
||||
|
||||
GVAR(gunList) = GVAR(gunList) + [_gunProfileEntry];
|
||||
|
||||
|
@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then {
|
||||
private ["_bulletLength", "_stabilityFactor"];
|
||||
_bulletLength = 1.8;
|
||||
_stabilityFactor = 1.5;
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||
};
|
||||
|
@ -106,7 +106,7 @@ private ["_wind1", "_wind2", "_windDrift"];
|
||||
_wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0];
|
||||
_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0];
|
||||
_windDrift = 0;
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
_bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection);
|
||||
};
|
||||
|
||||
@ -117,7 +117,7 @@ _speedAverage = 0;
|
||||
|
||||
private ["_eoetvoesMultiplier"];
|
||||
_eoetvoesMultiplier = 0;
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
_eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire);
|
||||
};
|
||||
|
||||
@ -142,14 +142,12 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
|
||||
_trueSpeed = vectorMagnitude _trueVelocity;
|
||||
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false]) then {
|
||||
_drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then {
|
||||
parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed]))
|
||||
} else {
|
||||
([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation))
|
||||
};
|
||||
_bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _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 {
|
||||
([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation))
|
||||
};
|
||||
_bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag);
|
||||
} else {
|
||||
_bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction);
|
||||
};
|
||||
@ -177,23 +175,20 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
|
||||
_kineticEnergy = _kineticEnergy * 0.737562149;
|
||||
|
||||
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,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;
|
||||
_windage2 = _windage2 + _spinDrift;
|
||||
};
|
||||
// Coriolis
|
||||
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
||||
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
||||
_windage1 = _windage1 + _horizontalCoriolis;
|
||||
_windage2 = _windage2 + _horizontalCoriolis;
|
||||
// Eoetvoes
|
||||
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
||||
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
||||
_elevation = _elevation + _verticalCoriolis;
|
||||
// Spin drift
|
||||
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
||||
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
||||
_windage1 = _windage1 + _spinDrift;
|
||||
_windage2 = _windage2 + _spinDrift;
|
||||
};
|
||||
|
||||
GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]];
|
||||
@ -217,23 +212,20 @@ _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2));
|
||||
_kineticEnergy = _kineticEnergy * 0.737562149;
|
||||
|
||||
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,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;
|
||||
_windage2 = _windage2 + _spinDrift;
|
||||
};
|
||||
// Coriolis
|
||||
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
||||
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
||||
_windage1 = _windage1 + _horizontalCoriolis;
|
||||
_windage2 = _windage2 + _horizontalCoriolis;
|
||||
// Eoetvoes
|
||||
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
||||
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
||||
_elevation = _elevation + _verticalCoriolis;
|
||||
// Spin drift
|
||||
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
||||
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
||||
_windage1 = _windage1 + _spinDrift;
|
||||
_windage2 = _windage2 + _spinDrift;
|
||||
};
|
||||
|
||||
[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60]
|
||||
|
@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then {
|
||||
private ["_bulletLength", "_stabilityFactor"];
|
||||
_bulletLength = 1.8;
|
||||
_stabilityFactor = 1.5;
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||
};
|
||||
|
@ -36,6 +36,7 @@ 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_targetSpeedDirection", nil];
|
||||
profileNamespace setVariable ["ACE_ATragMX_targetRange", nil];
|
||||
|
||||
profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", nil];
|
||||
|
@ -35,6 +35,7 @@ if (GVAR(showRangeCard)) then {
|
||||
[] call FUNC(update_range_card);
|
||||
};
|
||||
GVAR(showRangeCardSetup) call FUNC(show_range_card_setup);
|
||||
GVAR(showSolutionSetup) call FUNC(show_solution_setup);
|
||||
GVAR(showTargetData) call FUNC(show_target_data);
|
||||
GVAR(showTargetRangeAssist) call FUNC(show_target_range_assist);
|
||||
GVAR(showTargetSpeedAssist) call FUNC(show_target_speed_assist);
|
||||
|
@ -18,6 +18,7 @@
|
||||
[] call FUNC(parse_input);
|
||||
|
||||
GVAR(currentScopeUnit) = (GVAR(currentScopeUnit) + 1) % (count GVAR(scopeUnits));
|
||||
GVAR(workingMemory) set [6, GVAR(currentScopeUnit)];
|
||||
|
||||
[] call FUNC(update_scope_unit);
|
||||
[] call FUNC(update_result);
|
||||
|
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
* Cycles through the target directions left/right
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* call ace_atragmx_cycle_target_direction
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if ((ctrlText 140051) == ">") then {
|
||||
ctrlSetText [140051, "<"];
|
||||
} else {
|
||||
ctrlSetText [140051, ">"];
|
||||
};
|
@ -42,7 +42,9 @@ GVAR(currentGun) = 0;
|
||||
GVAR(currentTarget) = 0;
|
||||
GVAR(currentScopeUnit) = 0;
|
||||
GVAR(currentScopeClickUnit) = 2;
|
||||
GVAR(currentScopeClickUnitTemp) = 2;
|
||||
GVAR(currentScopeClickNumber) = 10;
|
||||
GVAR(currentScopeClickNumberTemp) = 10;
|
||||
|
||||
GVAR(atmosphereModeTBH) = true;
|
||||
GVAR(altitude) = 0;
|
||||
@ -57,6 +59,7 @@ GVAR(windSpeed2) = [0, 0, 0, 0];
|
||||
GVAR(windDirection) = [12, 12, 12, 12];
|
||||
GVAR(inclinationAngle) = [0, 0, 0, 0];
|
||||
GVAR(targetSpeed) = [0, 0, 0, 0];
|
||||
GVAR(targetSpeedDirection) = [1, 1, 1, 1];
|
||||
GVAR(targetRange) = [0, 0, 0, 0];
|
||||
|
||||
GVAR(showWind2) = false;
|
||||
@ -74,6 +77,7 @@ GVAR(showGunAmmoData) = false;
|
||||
GVAR(showGunList) = false;
|
||||
GVAR(showRangeCard) = false;
|
||||
GVAR(showRangeCardSetup) = false;
|
||||
GVAR(showSolutionSetup) = false;
|
||||
GVAR(showTargetData) = false;
|
||||
GVAR(showTargetRangeAssist) = false;
|
||||
GVAR(showTargetSpeedAssist) = false;
|
||||
|
@ -40,7 +40,12 @@ if (_inclinationAngleDegree != GVAR(inclinationAngle) select GVAR(currentTarget)
|
||||
GVAR(inclinationAngle) set [GVAR(currentTarget), round(acos(_inclinationAngleCosine))];
|
||||
};
|
||||
};
|
||||
GVAR(targetSpeed) set [GVAR(currentTarget), -50 max abs(parseNumber(ctrlText 140050)) min 50];
|
||||
GVAR(targetSpeed) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140050)) min 50];
|
||||
if ((ctrlText 140051) == ">") then {
|
||||
GVAR(targetSpeedDirection) set [GVAR(currentTarget), +1];
|
||||
} else {
|
||||
GVAR(targetSpeedDirection) set [GVAR(currentTarget), -1];
|
||||
};
|
||||
GVAR(targetRange) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140060)) min 4000];
|
||||
if (GVAR(currentUnit) != 2) then {
|
||||
GVAR(windSpeed1) set [GVAR(currentTarget), (GVAR(windSpeed1) select GVAR(currentTarget)) * 0.44704];
|
||||
@ -55,7 +60,7 @@ private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifl
|
||||
_boreHeight = parseNumber(ctrlText 120000);
|
||||
_bulletMass = parseNumber(ctrlText 120010);
|
||||
_bulletDiameter = parseNumber(ctrlText 120020);
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
_airFriction = 0.1 max parseNumber(ctrlText 120030) min 2;
|
||||
} else {
|
||||
_airFriction = parseNumber(ctrlText 120030) / -1000;
|
||||
@ -82,7 +87,7 @@ GVAR(workingMemory) set [5, _boreHeight];
|
||||
GVAR(workingMemory) set [12, _bulletMass];
|
||||
GVAR(workingMemory) set [13, _bulletDiameter];
|
||||
GVAR(workingMemory) set [14, _rifleTwist];
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
GVAR(workingMemory) set [15, _airFriction];
|
||||
} else {
|
||||
GVAR(workingMemory) set [4, _airFriction];
|
||||
@ -90,9 +95,9 @@ if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])
|
||||
GVAR(workingMemory) set [1, _muzzleVelocity];
|
||||
GVAR(workingMemory) set [2, _zeroRange];
|
||||
|
||||
private ["_elevationCur", "_windageCur", "_elevationScopeStep", "_windageScopeStep"];
|
||||
_elevationCur = parseNumber(ctrlText 402);
|
||||
_windageCur = parseNumber(ctrlText 412);
|
||||
private ["_elevationCur", "_windageCur", "_clickSize", "_clickNumber", "_clickInterval"];
|
||||
_elevationCur = GVAR(workingMemory) select 10;
|
||||
_windageCur = GVAR(workingMemory) select 11;
|
||||
|
||||
switch (GVAR(currentScopeUnit)) do {
|
||||
case 0: {
|
||||
@ -104,11 +109,16 @@ switch (GVAR(currentScopeUnit)) do {
|
||||
_windageCur = _windageCur / 1.047;
|
||||
};
|
||||
case 3: {
|
||||
_elevationScopeStep = (GVAR(workingMemory) select 7);
|
||||
_windageScopeStep = (GVAR(workingMemory) select 8);
|
||||
switch (GVAR(workingMemory) select 7) do {
|
||||
case 0: { _clickSize = 1; };
|
||||
case 1: { _clickSize = 1 / 1.047; };
|
||||
case 2: { _clickSize = 3.38; };
|
||||
};
|
||||
_clickNumber = GVAR(workingMemory) select 8;
|
||||
_clickInterval = _clickSize / _clickNumber;
|
||||
|
||||
_elevationCur = _elevationCur * _elevationScopeStep;
|
||||
_windageCur = _windageCur * _windageScopeStep;
|
||||
_elevationCur = Round(_elevationCur / _clickInterval);
|
||||
_windageCur = Round(_windageCur / _clickInterval);
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
GVAR(currentUnit) = 0 max (profileNamespace getVariable ["ACE_ATragMX_currentUnit", 2]) min 2;
|
||||
[(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;
|
||||
|
||||
GVAR(atmosphereModeTBH) = profileNamespace getVariable ["ACE_ATragMX_atmosphereModeTBH", true];
|
||||
GVAR(altitude) = -1000 max (profileNamespace getVariable ["ACE_ATragMX_altitude", 0]) min 20000;
|
||||
@ -34,6 +33,7 @@ GVAR(windSpeed2) = profileNamespace getVariable ["ACE_ATragMX_windSpeed2", [0, 0
|
||||
GVAR(windDirection) = profileNamespace getVariable ["ACE_ATragMX_windDirection", [12, 12, 12, 12]];
|
||||
GVAR(inclinationAngle) = profileNamespace getVariable ["ACE_ATragMX_inclinationAngle", [0, 0, 0, 0]];
|
||||
GVAR(targetSpeed) = profileNamespace getVariable ["ACE_ATragMX_targetSpeed", [0, 0, 0, 0]];
|
||||
GVAR(targetSpeedDirection) = profileNamespace getVariable ["ACE_ATragMX_targetSpeedDirection", [1, 1, 1, 1]];
|
||||
GVAR(targetRange) = profileNamespace getVariable ["ACE_ATragMX_targetRange", [0, 0, 0, 0]];
|
||||
|
||||
GVAR(rangeCardStartRange) = 0 max (profileNamespace getVariable ["ACE_ATragMX_rangeCardStartRange", 200]) min 3000;
|
||||
|
@ -18,7 +18,7 @@
|
||||
GVAR(showMainPage) = _this;
|
||||
|
||||
{ctrlShow [_x, _this]} forEach [10, 100, 11, 110, 12, 120, 13, 130, 14, 140, 20, 200, 21, 210, 22, 220, 23, 230, 30, 300, 31, 310, 32, 320, 33, 330, 34, 340, 40, 400, 401, 402, 403, 41, 410, 411, 412, 42, 420,
|
||||
500, 501, 502, 503, 600, 601, 602, 603, 1000, 1001, 1002, 1003, 1004, 2000, 3000, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008];
|
||||
500, 501, 502, 503, 600, 601, 602, 603, 1000, 1001, 1002, 1003, 1004, 2000, 2001, 3000, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008];
|
||||
|
||||
if (_this) then {
|
||||
if (GVAR(atmosphereModeTBH)) then {
|
||||
@ -26,4 +26,7 @@ if (_this) then {
|
||||
} else {
|
||||
{ctrlShow [_x, false]} forEach [21, 210, 22, 220];
|
||||
};
|
||||
if (GVAR(currentScopeUnit) != 3) then {
|
||||
{ctrlShow [_x, false]} forEach [2001];
|
||||
};
|
||||
};
|
||||
|
20
addons/atragmx/functions/fnc_show_solution_setup.sqf
Normal file
20
addons/atragmx/functions/fnc_show_solution_setup.sqf
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
* Shows/Hides the solution setup controls
|
||||
*
|
||||
* Arguments:
|
||||
* visible - <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* false call ace_atragmx_fnc_show_solution_setup
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
GVAR(showSolutionSetup) = _this;
|
||||
|
||||
{ctrlShow [_x, _this]} forEach [15000, 15001, 15002, 15003, 15004, 15005, 15006, 15007, 15008, 15009, 15010, 15011, 15012];
|
@ -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, 140061, 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, 140051, 14006, 140060, 140061, 14007, 14008, 14009, 14010, 14011];
|
||||
|
||||
if (_this) then {
|
||||
[] call FUNC(update_target_data);
|
||||
|
@ -20,7 +20,6 @@ profileNamespace setVariable ["ACE_ATragMX_profileNamespaceVersion", ATRAGMX_PRO
|
||||
profileNamespace setVariable ["ACE_ATragMX_currentUnit", GVAR(currentUnit)];
|
||||
profileNamespace setVariable ["ACE_ATragMX_currentGun", GVAR(currentGun)];
|
||||
profileNamespace setVariable ["ACE_ATragMX_currentTarget", GVAR(currentTarget)];
|
||||
profileNamespace setVariable ["ACE_ATragMX_currentScopeUnit", GVAR(currentScopeUnit)];
|
||||
|
||||
profileNamespace setVariable ["ACE_ATragMX_atmosphereModeTBH", GVAR(atmosphereModeTBH)];
|
||||
profileNamespace setVariable ["ACE_ATragMX_altitude", GVAR(altitude)];
|
||||
@ -36,6 +35,7 @@ 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_targetSpeedDirection", GVAR(targetSpeedDirection)];
|
||||
profileNamespace setVariable ["ACE_ATragMX_targetRange", GVAR(targetRange)];
|
||||
|
||||
profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", GVAR(rangeCardStartRange)];
|
||||
|
38
addons/atragmx/functions/fnc_toggle_solution_setup.sqf
Normal file
38
addons/atragmx/functions/fnc_toggle_solution_setup.sqf
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
* Toggles the solution setup screen on/off
|
||||
*
|
||||
* Arguments:
|
||||
* Apply new data? <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* 1 call ace_atragmx_fnc_toggle_solution_setup
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (ctrlVisible 15000) then {
|
||||
false call FUNC(show_solution_setup);
|
||||
true call FUNC(show_main_page);
|
||||
|
||||
if (_this == 1) then {
|
||||
GVAR(currentScopeClickUnit) = GVAR(currentScopeClickUnitTemp);
|
||||
GVAR(currentScopeClickNumber) = GVAR(currentScopeClickNumberTemp);
|
||||
GVAR(workingMemory) set [7, GVAR(currentScopeClickUnit)];
|
||||
GVAR(workingMemory) set [8, GVAR(currentScopeClickNumber)];
|
||||
[] call FUNC(update_scope_unit);
|
||||
[] call FUNC(update_result);
|
||||
};
|
||||
} else {
|
||||
true call FUNC(show_solution_setup);
|
||||
false call FUNC(show_main_page);
|
||||
|
||||
GVAR(currentScopeClickUnitTemp) = GVAR(currentScopeClickUnit);
|
||||
GVAR(currentScopeClickNumberTemp) = GVAR(currentScopeClickNumber);
|
||||
|
||||
[] call FUNC(update_solution_setup);
|
||||
};
|
@ -26,7 +26,7 @@ if (GVAR(currentUnit) != 2) then {
|
||||
} else {
|
||||
ctrlSetText [110, Str(Round(GVAR(workingMemory) select 12))];
|
||||
};
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
||||
} else {
|
||||
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
||||
|
@ -32,7 +32,7 @@ if (GVAR(currentUnit) != 2) then {
|
||||
} else {
|
||||
ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) * 1000) / 1000)];
|
||||
};
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
||||
} else {
|
||||
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_range", "_elevation", "_windage1", "_windage2", "_elevationScopeStep", "_windageScopeStep", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput"];
|
||||
private ["_range", "_elevation", "_windage1", "_windage2", "_clickSize", "_clickNumber", "_clickInterval", "_lead", "_TOF", "_velocity", "_kineticEnergy", "_rangeOutput", "_elevationOutput", "_windageOutput", "_lastColumnOutput"];
|
||||
_lastColumnOutput = "";
|
||||
|
||||
if (GVAR(showWind2) && GVAR(rangeCardCurrentColumn) == 0) then {
|
||||
@ -54,12 +54,17 @@ lnbClear 5007;
|
||||
_windage2 = _windage2 * 1.047;
|
||||
};
|
||||
case 3: {
|
||||
_elevationScopeStep = (GVAR(workingMemory) select 7);
|
||||
_windageScopeStep = (GVAR(workingMemory) select 8);
|
||||
switch (GVAR(workingMemory) select 7) do {
|
||||
case 0: { _clickSize = 1; };
|
||||
case 1: { _clickSize = 1 / 1.047; };
|
||||
case 2: { _clickSize = 3.38; };
|
||||
};
|
||||
_clickNumber = GVAR(workingMemory) select 8;
|
||||
_clickInterval = _clickSize / _clickNumber;
|
||||
|
||||
_elevation = Round(_elevation / _elevationScopeStep);
|
||||
_windage1 = Round(_windage1 / _windageScopeStep);
|
||||
_windage2 = Round(_windage2 / _windageScopeStep);
|
||||
_elevation = Round(_elevation / _clickInterval);
|
||||
_windage1 = Round(_windage1 / _clickInterval);
|
||||
_windage2 = Round(_windage2 / _clickInterval);
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_wind2", "_windageRel", "_windageCur", "_lead", "_elevationScopeStep", "_windageScopeStep"];
|
||||
private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_wind2", "_windageRel", "_windageCur", "_lead", "_clickSize", "_clickNumber", "_clickInterval"];
|
||||
_elevationAbs = GVAR(elevationOutput) select GVAR(currentTarget);
|
||||
_windageAbs = GVAR(windage1Output) select GVAR(currentTarget);
|
||||
|
||||
@ -55,19 +55,24 @@ switch (GVAR(currentScopeUnit)) do {
|
||||
_windageCur = _windageCur * 1.047;
|
||||
};
|
||||
case 3: {
|
||||
_elevationScopeStep = (GVAR(workingMemory) select 7);
|
||||
_windageScopeStep = (GVAR(workingMemory) select 8);
|
||||
switch (GVAR(workingMemory) select 7) do {
|
||||
case 0: { _clickSize = 1; };
|
||||
case 1: { _clickSize = 1 / 1.047; };
|
||||
case 2: { _clickSize = 3.38; };
|
||||
};
|
||||
_clickNumber = GVAR(workingMemory) select 8;
|
||||
_clickInterval = _clickSize / _clickNumber;
|
||||
|
||||
_elevationAbs = Round(_elevationAbs / _elevationScopeStep);
|
||||
_windageAbs = Round(_windageAbs / _windageScopeStep);
|
||||
_elevationAbs = Round(_elevationAbs / _clickInterval);
|
||||
_windageAbs = Round(_windageAbs / _clickInterval);
|
||||
|
||||
_wind2 = Round(_wind2 / _windageScopeStep);
|
||||
_wind2 = Round(_wind2 / _clickInterval);
|
||||
|
||||
_elevationRel = Round(_elevationRel / _elevationScopeStep);
|
||||
_windageRel = Round(_windageRel / _windageScopeStep);
|
||||
_elevationRel = Round(_elevationRel / _clickInterval);
|
||||
_windageRel = Round(_windageRel / _clickInterval);
|
||||
|
||||
_elevationCur = Round(_elevationCur / _elevationScopeStep);
|
||||
_windageCur = Round(_windageCur / _windageScopeStep);
|
||||
_elevationCur = Round(_elevationCur / _clickInterval);
|
||||
_windageCur = Round(_windageCur / _clickInterval);
|
||||
};
|
||||
};
|
||||
|
||||
@ -77,16 +82,88 @@ if (GVAR(showWind2)) then {
|
||||
ctrlSetText [42, "Lead"];
|
||||
};
|
||||
|
||||
ctrlSetText [400, Str(Round(_elevationAbs * 100) / 100)];
|
||||
ctrlSetText [401, Str(Round(_elevationRel * 100) / 100)];
|
||||
ctrlSetText [402, Str(Round(_elevationCur * 100) / 100)];
|
||||
_elevationAbs = Round(_elevationAbs * 100) / 100;
|
||||
if (_elevationAbs > 0) then {
|
||||
ctrlSetText [400, format["%1", abs(_elevationAbs)]];
|
||||
} else {
|
||||
if (_elevationAbs < 0) then {
|
||||
ctrlSetText [400, format["%1D", abs(_elevationAbs)]];
|
||||
} else {
|
||||
ctrlSetText [400, "0.0"];
|
||||
};
|
||||
};
|
||||
_elevationRel = Round(_elevationRel * 100) / 100;
|
||||
if (_elevationRel > 0) then {
|
||||
ctrlSetText [401, format["%1", abs(_elevationRel)]];
|
||||
} else {
|
||||
if (_elevationRel < 0) then {
|
||||
ctrlSetText [401, format["%1D", abs(_elevationRel)]];
|
||||
} else {
|
||||
ctrlSetText [401, "0.0"];
|
||||
};
|
||||
};
|
||||
_elevationCur = Round(_elevationCur * 100) / 100;
|
||||
if (_elevationCur > 0) then {
|
||||
ctrlSetText [402, format["%1", abs(_elevationCur)]];
|
||||
} else {
|
||||
if (_elevationCur < 0) then {
|
||||
ctrlSetText [402, format["%1D", abs(_elevationCur)]];
|
||||
} else {
|
||||
ctrlSetText [402, "0.0"];
|
||||
};
|
||||
};
|
||||
|
||||
ctrlSetText [410, Str(Round(_windageAbs * 100) / 100)];
|
||||
ctrlSetText [411, Str(Round(_windageRel * 100) / 100)];
|
||||
ctrlSetText [412, Str(Round(_windageCur * 100) / 100)];
|
||||
_windageAbs = Round(_windageAbs * 100) / 100;
|
||||
if (_windageAbs > 0) then {
|
||||
ctrlSetText [410, format["%1R", abs(_windageAbs)]];
|
||||
} else {
|
||||
if (_windageAbs < 0) then {
|
||||
ctrlSetText [410, format["%1L", abs(_windageAbs)]];
|
||||
} else {
|
||||
ctrlSetText [410, "0.0"];
|
||||
};
|
||||
};
|
||||
_windageRel = Round(_windageRel * 100) / 100;
|
||||
if (_windageRel > 0) then {
|
||||
ctrlSetText [411, format["%1R", abs(_windageRel)]];
|
||||
} else {
|
||||
if (_windageRel < 0) then {
|
||||
ctrlSetText [411, format["%1L", abs(_windageRel)]];
|
||||
} else {
|
||||
ctrlSetText [411, "0.0"];
|
||||
};
|
||||
};
|
||||
_windageCur = Round(_windageCur * 100) / 100;
|
||||
if (_windageCur > 0) then {
|
||||
ctrlSetText [412, format["%1R", abs(_windageCur)]];
|
||||
} else {
|
||||
if (_windageCur < 0) then {
|
||||
ctrlSetText [412, format["%1L", abs(_windageCur)]];
|
||||
} else {
|
||||
ctrlSetText [412, "0.0"];
|
||||
};
|
||||
};
|
||||
|
||||
if (GVAR(showWind2)) then {
|
||||
ctrlSetText [420, Str(Round(_wind2 * 100) / 100)];
|
||||
_wind2 = Round(_wind2 * 100) / 100;
|
||||
if (_wind2 > 0) then {
|
||||
ctrlSetText [420, format["%1R", abs(_wind2)]];
|
||||
} else {
|
||||
if (_wind2 < 0) then {
|
||||
ctrlSetText [420, format["%1L", abs(_wind2)]];
|
||||
} else {
|
||||
ctrlSetText [420, "0.0"];
|
||||
};
|
||||
};
|
||||
} else {
|
||||
ctrlSetText [420, Str(Round(_lead * 100) / 100)];
|
||||
_lead = Round(_lead * 100) / 100;
|
||||
if (_lead > 0) then {
|
||||
if ((GVAR(targetSpeedDirection) select GVAR(currentTarget)) == 1) then {
|
||||
ctrlSetText [420, format["%1R", abs(_lead)]];
|
||||
} else {
|
||||
ctrlSetText [420, format["%1L", abs(_lead)]];
|
||||
};
|
||||
} else {
|
||||
ctrlSetText [420, "0.0"];
|
||||
};
|
||||
};
|
@ -15,10 +15,15 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
ctrlSetText [2000, GVAR(scopeUnits) select GVAR(currentScopeUnit)];
|
||||
ctrlSetText [2001, Str(GVAR(currentScopeClickNumber))];
|
||||
|
||||
if (GVAR(currentScopeUnit) == 3) then {
|
||||
ctrlSetText [2000, format["Clicks=%1", GVAR(currentScopeClickNumber)]];
|
||||
ctrlSetText [5000, format["Clicks=%1", GVAR(currentScopeClickNumber)]];
|
||||
if (GVAR(showMainPage)) then {
|
||||
ctrlShow [2001, true];
|
||||
};
|
||||
} else {
|
||||
ctrlSetText [2000, GVAR(scopeUnits) select GVAR(currentScopeUnit)];
|
||||
ctrlSetText [5000, GVAR(scopeUnits) select GVAR(currentScopeUnit)];
|
||||
};
|
||||
ctrlShow [2001, false];
|
||||
};
|
31
addons/atragmx/functions/fnc_update_solution_setup.sqf
Normal file
31
addons/atragmx/functions/fnc_update_solution_setup.sqf
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
* Updates all solution setup input fields
|
||||
*
|
||||
* Arguments:
|
||||
* Nothing
|
||||
*
|
||||
* Return Value:
|
||||
* Nothing
|
||||
*
|
||||
* Example:
|
||||
* call ace_atragmx_fnc_update_solution_setup
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
{((uiNamespace getVariable "ATragMX_Display") displayCtrl _x) ctrlEnable true} forEach [15001, 15002, 15003, 15004, 15005, 15006, 15008, 15009, 15010];
|
||||
|
||||
switch (GVAR(currentScopeClickNumberTemp)) do {
|
||||
case 1: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15001) ctrlEnable false; };
|
||||
case 2: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15002) ctrlEnable false; };
|
||||
case 3: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15003) ctrlEnable false; };
|
||||
case 4: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15004) ctrlEnable false; };
|
||||
case 8: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15005) ctrlEnable false; };
|
||||
case 10: { ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15006) ctrlEnable false; };
|
||||
};
|
||||
|
||||
((uiNamespace getVariable "ATragMX_Display") displayCtrl (15008 + GVAR(currentScopeClickUnitTemp))) ctrlEnable false;
|
||||
|
||||
ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 15011);
|
@ -32,6 +32,11 @@ if (GVAR(currentUnit) != 2) then {
|
||||
} else {
|
||||
ctrlSetText [140050, Str(Round((GVAR(targetSpeed) select GVAR(currentTarget)) * 100) / 100)];
|
||||
};
|
||||
if ((GVAR(targetSpeedDirection) select GVAR(currentTarget)) == 1) then {
|
||||
ctrlSetText [140051, ">"];
|
||||
} else {
|
||||
ctrlSetText [140051, "<"];
|
||||
};
|
||||
if (GVAR(currentUnit) == 1) then {
|
||||
ctrlSetText [140060, Str(Round((GVAR(targetRange) select GVAR(currentTarget)) * 1.0936133))];
|
||||
} else {
|
||||
|
@ -15,10 +15,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
((uiNamespace getVariable "ATragMX_Display") displayCtrl 500) ctrlEnable true;
|
||||
((uiNamespace getVariable "ATragMX_Display") displayCtrl 501) ctrlEnable true;
|
||||
((uiNamespace getVariable "ATragMX_Display") displayCtrl 502) ctrlEnable true;
|
||||
((uiNamespace getVariable "ATragMX_Display") displayCtrl 503) ctrlEnable true;
|
||||
{((uiNamespace getVariable "ATragMX_Display") displayCtrl _x) ctrlEnable true} forEach [500, 501, 502, 503];
|
||||
|
||||
((uiNamespace getVariable "ATragMX_Display") displayCtrl 500 + GVAR(currentTarget)) ctrlEnable false;
|
||||
|
||||
|
@ -11,4 +11,4 @@
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
|
||||
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.2
|
||||
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.3
|
||||
|
@ -23,6 +23,8 @@ class CfgAmmo {
|
||||
airFriction=-0.001265;
|
||||
hit=8;
|
||||
typicalSpeed=750;
|
||||
tracerStartTime = 0.073; //M856 tracer burns out to 800m
|
||||
tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=62;
|
||||
@ -36,7 +38,7 @@ class CfgAmmo {
|
||||
};
|
||||
class ACE_556x45_Ball_Mk262 : B_556x45_Ball {
|
||||
airFriction=-0.001125;
|
||||
caliber=0.6;
|
||||
caliber=0.8;
|
||||
deflecting=18;
|
||||
hit=11;
|
||||
typicalSpeed=836;
|
||||
@ -53,7 +55,7 @@ class CfgAmmo {
|
||||
};
|
||||
class ACE_556x45_Ball_Mk318 : B_556x45_Ball {
|
||||
airFriction=-0.001120;
|
||||
caliber=0.6;
|
||||
caliber=0.8;
|
||||
deflecting=18;
|
||||
hit=9;
|
||||
typicalSpeed=886;
|
||||
@ -68,13 +70,30 @@ class CfgAmmo {
|
||||
ACE_muzzleVelocities[]={780, 886, 950};
|
||||
ACE_barrelLengths[]={10, 15.5, 20};
|
||||
};
|
||||
class ACE_556x45_Ball_M995_AP : B_556x45_Ball {
|
||||
airFriction=-0.001120;
|
||||
caliber=1.6;
|
||||
deflecting=18;
|
||||
hit=6;
|
||||
typicalSpeed=886;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=46;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.151};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={950, 1030, 1040};
|
||||
ACE_barrelLengths[]={10, 15.5, 20};
|
||||
};
|
||||
class B_556x45_Ball_Tracer_Red;
|
||||
class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red {
|
||||
nvgOnly = 1;
|
||||
};
|
||||
class ACE_545x39_Ball_7N6M : B_556x45_Ball {
|
||||
airFriction=-0.001162;
|
||||
caliber=0.5;
|
||||
caliber=0.6;
|
||||
deflecting=18;
|
||||
hit=7;
|
||||
typicalSpeed=880;
|
||||
@ -89,13 +108,15 @@ class CfgAmmo {
|
||||
ACE_muzzleVelocities[]={780, 880, 920};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class B_556x45_Ball_Tracer_Yellow;
|
||||
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Yellow {
|
||||
class B_556x45_Ball_Tracer_Green;
|
||||
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green {
|
||||
airFriction=-0.001162;
|
||||
caliber=0.5;
|
||||
caliber=0.6;
|
||||
deflecting=18;
|
||||
hit=7;
|
||||
typicalSpeed=883;
|
||||
tracerStartTime = 0.073; //7T3M tracer burns out to 850m
|
||||
tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=0.220;
|
||||
ACE_bulletLength=0.85;
|
||||
ACE_bulletMass=49.8;
|
||||
@ -129,10 +150,10 @@ class CfgAmmo {
|
||||
class ACE_65x39_Caseless_green_Tracer_Dim : B_65x39_Caseless_green {
|
||||
nvgOnly = 1;
|
||||
};
|
||||
class ACE_65x47_Ball_Scenar: B_65x39_Caseless
|
||||
{
|
||||
class ACE_65x47_Ball_Scenar: B_65x39_Caseless {
|
||||
airFriction=-0.00078;
|
||||
typicalSpeed=820 ;
|
||||
caliber=0.9;
|
||||
ACE_caliber=0.264;
|
||||
ACE_bulletLength=1.364;
|
||||
ACE_bulletMass=139;
|
||||
@ -144,10 +165,27 @@ class CfgAmmo {
|
||||
ACE_muzzleVelocities[]={730, 760, 790, 820, 830};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
};
|
||||
class ACE_65_Creedmor_Ball: B_65x39_Caseless {
|
||||
airFriction=-0.000651;
|
||||
typicalSpeed=860 ;
|
||||
caliber=1.1;
|
||||
ACE_caliber=0.264;
|
||||
ACE_bulletLength=1.426;
|
||||
ACE_bulletMass=140;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.317};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={750, 820, 840, 852, 860};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
};
|
||||
class B_762x51_Ball : BulletBase {
|
||||
airFriction=-0.001035;
|
||||
typicalSpeed=833;
|
||||
hit=9;
|
||||
tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m
|
||||
tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=146;
|
||||
@ -165,7 +203,7 @@ class CfgAmmo {
|
||||
};
|
||||
class ACE_762x51_Ball_M118LR : B_762x51_Ball {
|
||||
airFriction=-0.0008525;
|
||||
caliber=1.05;
|
||||
caliber=1.8;
|
||||
hit=16;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
@ -179,11 +217,27 @@ class CfgAmmo {
|
||||
ACE_muzzleVelocities[]={750, 780, 790, 794};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x51_Ball_Mk316_Mod_0 : B_762x51_Ball {
|
||||
airFriction=-0.0008525;
|
||||
caliber=1.8;
|
||||
hit=16;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.24;
|
||||
ACE_bulletMass=175;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||
ACE_ballisticCoefficients[]={0.243};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={775, 790, 805, 810};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball {
|
||||
airFriction=-0.00103;
|
||||
caliber=0.85;
|
||||
caliber=1.5;
|
||||
hit=14;
|
||||
typicalSpeed=890;
|
||||
typicalSpeed=900;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.24;
|
||||
ACE_bulletMass=130;
|
||||
@ -195,11 +249,27 @@ class CfgAmmo {
|
||||
ACE_muzzleVelocities[]={838, 892, 910};
|
||||
ACE_barrelLengths[]={13, 16, 20};
|
||||
};
|
||||
class ACE_762x51_Ball_M993_AP : B_762x51_Ball {
|
||||
airFriction=-0.00103;
|
||||
caliber=2.2;
|
||||
hit=11;
|
||||
typicalSpeed=930;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.24;
|
||||
ACE_bulletMass=127;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.377};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={875, 910, 930};
|
||||
ACE_barrelLengths[]={13, 16, 20};
|
||||
};
|
||||
class ACE_762x51_Ball_Subsonic : B_762x51_Ball {
|
||||
airFriction=-0.000535;
|
||||
caliber=0.5;
|
||||
caliber=1;
|
||||
hit=6;
|
||||
typicalSpeed=790;
|
||||
typicalSpeed=320;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.340;
|
||||
ACE_bulletMass=200;
|
||||
@ -211,15 +281,63 @@ class CfgAmmo {
|
||||
ACE_muzzleVelocities[]={305, 325, 335, 340};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
};
|
||||
class ACE_30_06_M1_Ball : B_762x51_Ball {
|
||||
airFriction=-0.0009;
|
||||
typicalSpeed=800;
|
||||
caliber=2.0;
|
||||
hit=10;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.21;
|
||||
ACE_bulletMass=174;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.494};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={700, 785, 800, 830, 840};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
};
|
||||
class ACE_7_Remington_Magnum_Ball : B_762x51_Ball {
|
||||
airFriction=-0.0008;
|
||||
typicalSpeed=820;
|
||||
caliber=2.1;
|
||||
hit=8;
|
||||
ACE_caliber=0.284;
|
||||
ACE_bulletLength=1.529;
|
||||
ACE_bulletMass=180;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.345};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={720, 780, 812, 822, 830};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
};
|
||||
class ACE_243_Winchester_Ball : B_762x51_Ball {
|
||||
airFriction=-0.00095;
|
||||
typicalSpeed=915;
|
||||
caliber=2.3;
|
||||
hit=6;
|
||||
ACE_caliber=0.243;
|
||||
ACE_bulletLength=1.282;
|
||||
ACE_bulletMass=180;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.278};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={830, 875, 900, 915, 920};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
};
|
||||
class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball {
|
||||
airFriction=-0.000830;
|
||||
caliber=1.08;
|
||||
caliber=1.8;
|
||||
hit=17;
|
||||
typicalSpeed=900;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.353;
|
||||
ACE_bulletMass=190;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||
ACE_ballisticCoefficients[]={0.268};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
@ -229,13 +347,13 @@ class CfgAmmo {
|
||||
};
|
||||
class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball {
|
||||
airFriction=-0.000815;
|
||||
caliber=1.12;
|
||||
caliber=1.9;
|
||||
hit=18;
|
||||
typicalSpeed=867;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.489;
|
||||
ACE_bulletMass=220;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||
ACE_ballisticCoefficients[]={0.310};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
@ -245,7 +363,7 @@ class CfgAmmo {
|
||||
};
|
||||
class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball {
|
||||
airFriction=-0.00076;
|
||||
caliber=1.15;
|
||||
caliber=2.0;
|
||||
hit=19;
|
||||
typicalSpeed=853;
|
||||
ACE_caliber=0.308;
|
||||
@ -275,7 +393,7 @@ class CfgAmmo {
|
||||
};
|
||||
class ACE_762x54_Ball_7N14 : B_762x51_Ball {
|
||||
airFriction=-0.001023;
|
||||
caliber=0.95;
|
||||
caliber=1.5;
|
||||
hit=15;
|
||||
typicalSpeed=820;
|
||||
ACE_caliber=0.312;
|
||||
@ -292,9 +410,11 @@ class CfgAmmo {
|
||||
class B_762x54_Tracer_Green;
|
||||
class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green {
|
||||
airFriction=-0.001023;
|
||||
caliber=0.9;
|
||||
caliber=1.5;
|
||||
hit=15;
|
||||
typicalSpeed=800;
|
||||
tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds
|
||||
tracerEndTime = 3;
|
||||
ACE_caliber=0.312;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=149;
|
||||
@ -308,7 +428,7 @@ class CfgAmmo {
|
||||
};
|
||||
class ACE_762x35_Ball : B_762x51_Ball {
|
||||
airFriction=-0.000821;
|
||||
caliber=0.9;
|
||||
caliber=1.5;
|
||||
hit=11;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
@ -325,6 +445,7 @@ class CfgAmmo {
|
||||
class ACE_762x39_Ball : B_762x51_Ball {
|
||||
airFriction=-0.0015168;
|
||||
hit=12;
|
||||
caliber=1.5;
|
||||
typicalSpeed=716;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
@ -337,10 +458,13 @@ class CfgAmmo {
|
||||
ACE_muzzleVelocities[]={650, 716, 750};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
};
|
||||
class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Yellow {
|
||||
class ACE_762x39_Ball_57N231P : B_762x54_Tracer_Green {
|
||||
airFriction=-0.0015168;
|
||||
hit=12;
|
||||
caliber=1.5;
|
||||
typicalSpeed=716;
|
||||
tracerStartTime = 0.073; //57N231P tracer burns out to 800m
|
||||
tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=117;
|
||||
@ -430,6 +554,7 @@ class CfgAmmo {
|
||||
class ACE_303_Ball : ACE_762x51_Ball_M118LR {
|
||||
airFriction=-0.00083;
|
||||
typicalSpeed=761;
|
||||
caliber=2.0;
|
||||
ACE_caliber=0.311;
|
||||
ACE_bulletLength=1.227;
|
||||
ACE_bulletMass=174;
|
||||
@ -517,7 +642,6 @@ class CfgAmmo {
|
||||
class ACE_338_Ball : B_338_Ball {
|
||||
timeToLive=10;
|
||||
airFriction=-0.000535;
|
||||
caliber=1.55;
|
||||
typicalSpeed=826;
|
||||
ACE_caliber=0.338;
|
||||
ACE_bulletLength=1.70;
|
||||
@ -533,7 +657,7 @@ class CfgAmmo {
|
||||
class ACE_338_Ball_API526 : B_338_Ball {
|
||||
timeToLive=10;
|
||||
airFriction=-0.000673;
|
||||
caliber=2.4;
|
||||
caliber=2.8;
|
||||
typicalSpeed=826;
|
||||
ACE_caliber=0.338;
|
||||
ACE_bulletLength=1.535;
|
||||
@ -563,7 +687,7 @@ class CfgAmmo {
|
||||
class B_127x99_Ball : BulletBase {
|
||||
timeToLive=10;
|
||||
airFriction=-0.0006;
|
||||
typicalSpeed=853;
|
||||
typicalSpeed=900;
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.310;
|
||||
ACE_bulletMass=647;
|
||||
@ -572,13 +696,31 @@ class CfgAmmo {
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={853};
|
||||
ACE_muzzleVelocities[]={900};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class ACE_127x99_API : BulletBase {
|
||||
timeToLive=10;
|
||||
airFriction=-0.0006;
|
||||
typicalSpeed=900;
|
||||
hit=25;
|
||||
caliber=4.0;
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.310;
|
||||
ACE_bulletMass=648;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.670};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={900};
|
||||
ACE_barrelLengths[]={29};
|
||||
};
|
||||
class ACE_127x99_Ball_AMAX : B_127x99_Ball {
|
||||
timeToLive=10;
|
||||
airFriction=-0.000374;
|
||||
typicalSpeed=860;
|
||||
caliber=3.0;
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.540;
|
||||
ACE_bulletMass=750;
|
||||
|
@ -42,13 +42,21 @@ class CfgMagazines {
|
||||
class ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim: 30Rnd_65x39_caseless_green_mag_Tracer {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_65x39_Caseless_green_Tracer_Dim";
|
||||
displayName = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimName";
|
||||
displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort";
|
||||
descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimDescription";
|
||||
displayName = "$STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimName";
|
||||
displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimNameShort";
|
||||
descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimDescription";
|
||||
};
|
||||
|
||||
class 30Rnd_556x45_Stanag: CA_Magazine {
|
||||
};
|
||||
class ACE_30Rnd_556x45_Stanag_M995_AP_mag: 30Rnd_556x45_Stanag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_556x45_Ball_M995_AP";
|
||||
displayName = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Name";
|
||||
displayNameShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Description";
|
||||
initSpeed = 1046;
|
||||
};
|
||||
class ACE_30Rnd_556x45_Stanag_Mk262_mag: 30Rnd_556x45_Stanag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_556x45_Ball_Mk262";
|
||||
@ -123,6 +131,15 @@ class CfgMagazines {
|
||||
descriptionShort = "$STR_ACE_10Rnd_762x51_M118LR_Mag_Description";
|
||||
initSpeed = 780;
|
||||
};
|
||||
class ACE_10Rnd_762x51_Mk316_Mod_0_Mag: 10Rnd_762x51_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_762x51_Ball_Mk316_Mod_0";
|
||||
count = 10;
|
||||
displayName = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Name";
|
||||
displayNameShort = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Description";
|
||||
initSpeed = 790;
|
||||
};
|
||||
class ACE_10Rnd_762x51_Mk319_Mod_0_Mag: 10Rnd_762x51_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_762x51_Ball_Mk319_Mod_0";
|
||||
@ -132,6 +149,15 @@ class CfgMagazines {
|
||||
descriptionShort = "$STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Description";
|
||||
initSpeed = 900;
|
||||
};
|
||||
class ACE_10Rnd_762x51_M993_AP_Mag: 10Rnd_762x51_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_762x51_Ball_M993_AP";
|
||||
count = 10;
|
||||
displayName = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_Name";
|
||||
displayNameShort = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_Description";
|
||||
initSpeed = 920;
|
||||
};
|
||||
class ACE_20Rnd_762x51_M118LR_Mag: 20Rnd_762x51_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_762x51_Ball_M118LR";
|
||||
@ -140,6 +166,15 @@ class CfgMagazines {
|
||||
descriptionShort = "$STR_ACE_20Rnd_762x51_M118LR_Mag_Description";
|
||||
initSpeed = 780;
|
||||
};
|
||||
class ACE_20Rnd_762x51_Mk316_Mod_0_Mag: 20Rnd_762x51_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_762x51_Ball_Mk316_Mod_0";
|
||||
count = 20;
|
||||
displayName = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Name";
|
||||
displayNameShort = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Description";
|
||||
initSpeed = 790;
|
||||
};
|
||||
class ACE_20Rnd_762x51_Mk319_Mod_0_Mag: 20Rnd_762x51_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_762x51_Ball_Mk319_Mod_0";
|
||||
@ -148,6 +183,15 @@ class CfgMagazines {
|
||||
descriptionShort = "$STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Description";
|
||||
initSpeed = 900;
|
||||
};
|
||||
class ACE_20Rnd_762x51_M993_AP_Mag: 20Rnd_762x51_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_762x51_Ball_M993_AP";
|
||||
count = 20;
|
||||
displayName = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_Name";
|
||||
displayNameShort = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_Description";
|
||||
initSpeed = 920;
|
||||
};
|
||||
class ACE_20Rnd_762x67_Mk248_Mod_0_Mag: 20Rnd_762x51_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_762x67_Ball_Mk248_Mod_0";
|
||||
@ -179,6 +223,13 @@ class CfgMagazines {
|
||||
displayNameShort = "$STR_ACE_30Rnd_65x47_Scenar_mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_30Rnd_65x47_Scenar_mag_Description";
|
||||
};
|
||||
class ACE_30Rnd_65_Creedmor_mag: 30Rnd_65x39_caseless_mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_65_Creedmor_Ball";
|
||||
displayName = "$STR_ACE_30Rnd_65_Creedmor_mag_Name";
|
||||
displayNameShort = "$STR_ACE_30Rnd_65_Creedmor_mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_30Rnd_65_Creedmor_mag_Description";
|
||||
};
|
||||
class 10Rnd_338_Mag;
|
||||
class ACE_10Rnd_338_300gr_HPBT_Mag: 10Rnd_338_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
@ -204,7 +255,15 @@ class CfgMagazines {
|
||||
displayName = "$STR_ACE_5Rnd_127x99_Mag_Name";
|
||||
displayNameShort = "$STR_ACE_5Rnd_127x99_Mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_5Rnd_127x99_Mag_Description";
|
||||
initSpeed = 853;
|
||||
initSpeed = 900;
|
||||
};
|
||||
class ACE_5Rnd_127x99_API_Mag: 5Rnd_127x108_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_127x99_API";
|
||||
displayName = "$STR_ACE_5Rnd_127x99_API_Mag_Name";
|
||||
displayNameShort = "$STR_ACE_5Rnd_127x99_API_Mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_5Rnd_127x99_API_Mag_Description";
|
||||
initSpeed = 900;
|
||||
};
|
||||
class ACE_5Rnd_127x99_AMAX_Mag: 5Rnd_127x108_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
|
@ -14,6 +14,7 @@ class CfgVehicles {
|
||||
class Box_NATO_Wps_F: NATO_Box_Base {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||
};
|
||||
};
|
||||
|
||||
@ -26,6 +27,7 @@ class CfgVehicles {
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
||||
};
|
||||
};
|
||||
@ -33,14 +35,18 @@ class CfgVehicles {
|
||||
class Box_NATO_Ammo_F: NATO_Box_Base {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
||||
};
|
||||
};
|
||||
@ -49,13 +55,18 @@ class CfgVehicles {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M993_AP_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
||||
};
|
||||
};
|
||||
@ -64,8 +75,11 @@ class CfgVehicles {
|
||||
class B_supplyCrate_F: ReammoBox_F {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||
@ -76,6 +90,7 @@ class CfgVehicles {
|
||||
class Box_East_Wps_F: EAST_Box_Base {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
|
||||
};
|
||||
};
|
||||
@ -85,6 +100,7 @@ class CfgVehicles {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,1);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
|
||||
};
|
||||
};
|
||||
@ -92,6 +108,7 @@ class CfgVehicles {
|
||||
class Box_East_Ammo_F: EAST_Box_Base {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
|
||||
};
|
||||
};
|
||||
@ -99,7 +116,7 @@ class CfgVehicles {
|
||||
class Box_East_Support_F: EAST_Box_Base {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,6);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
|
||||
};
|
||||
};
|
||||
@ -107,6 +124,7 @@ class CfgVehicles {
|
||||
class IND_Box_Base;
|
||||
class Box_IND_Wps_F: IND_Box_Base {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||
};
|
||||
@ -120,6 +138,7 @@ class CfgVehicles {
|
||||
|
||||
class Box_IND_Ammo_F: IND_Box_Base {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||
};
|
||||
@ -128,6 +147,7 @@ class CfgVehicles {
|
||||
class FIA_Box_Base_F;
|
||||
class Box_FIA_Wps_F: FIA_Box_Base_F {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||
};
|
||||
@ -135,6 +155,7 @@ class CfgVehicles {
|
||||
|
||||
class Box_FIA_Ammo_F: FIA_Box_Base_F {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||
};
|
||||
@ -142,6 +163,7 @@ class CfgVehicles {
|
||||
|
||||
class I_supplyCrate_F: B_supplyCrate_F {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||
};
|
||||
@ -149,6 +171,7 @@ class CfgVehicles {
|
||||
|
||||
class IG_supplyCrate_F: ReammoBox_F {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||
};
|
||||
@ -157,6 +180,7 @@ class CfgVehicles {
|
||||
class C_supplyCrate_F: ReammoBox_F {
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||
};
|
||||
};
|
||||
|
||||
@ -164,12 +188,16 @@ class CfgVehicles {
|
||||
scope = 2;
|
||||
accuracy = 1000;
|
||||
displayName = "[ACE] Ammo Supply Crate";
|
||||
// TODO: model = "...";
|
||||
model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F";
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
class TransportMagazines {
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M993_AP_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||
@ -177,6 +205,7 @@ class CfgVehicles {
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_1_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,4);
|
||||
@ -185,9 +214,11 @@ class CfgVehicles {
|
||||
MACRO_ADDMAGAZINE(ACE_100Rnd_65x39_caseless_mag_Tracer_Dim,4);
|
||||
MACRO_ADDMAGAZINE(ACE_200Rnd_65x39_cased_Box_Tracer_Dim,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
||||
};
|
||||
};
|
||||
|
@ -88,7 +88,8 @@ class CfgWeapons {
|
||||
"30Rnd_65x39_caseless_mag",
|
||||
"30Rnd_65x39_caseless_mag_Tracer",
|
||||
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim",
|
||||
"ACE_30Rnd_65x47_Scenar_mag"
|
||||
"ACE_30Rnd_65x47_Scenar_mag",
|
||||
"ACE_30Rnd_65_Creedmor_mag"
|
||||
};
|
||||
initSpeed = -1.018;
|
||||
ACE_barrelTwist=9;
|
||||
@ -381,6 +382,7 @@ class CfgWeapons {
|
||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
@ -400,6 +402,7 @@ class CfgWeapons {
|
||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
@ -414,6 +417,7 @@ class CfgWeapons {
|
||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
@ -428,6 +432,7 @@ class CfgWeapons {
|
||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
@ -448,6 +453,7 @@ class CfgWeapons {
|
||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
@ -462,6 +468,7 @@ class CfgWeapons {
|
||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
@ -476,6 +483,7 @@ class CfgWeapons {
|
||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
@ -502,8 +510,10 @@ class CfgWeapons {
|
||||
magazines[] = {
|
||||
"20Rnd_762x51_Mag",
|
||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||
"ACE_20Rnd_762x51_Mk319_Mod_0_Mag",
|
||||
"ACE_20Rnd_762x51_M993_AP_Mag",
|
||||
"ACE_20Rnd_762x51_Mag_SD"
|
||||
};
|
||||
initSpeed = -0.9724;
|
||||
@ -527,6 +537,7 @@ class CfgWeapons {
|
||||
"5Rnd_127x108_Mag",
|
||||
"5Rnd_127x108_APDS_Mag",
|
||||
"ACE_5Rnd_127x99_Mag",
|
||||
"ACE_5Rnd_127x99_API_Mag",
|
||||
"ACE_5Rnd_127x99_AMAX_Mag"
|
||||
};
|
||||
initSpeed = -1.0;
|
||||
@ -550,8 +561,10 @@ class CfgWeapons {
|
||||
magazines[] = {
|
||||
"20Rnd_762x51_Mag",
|
||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||
"ACE_20Rnd_762x51_Mk319_Mod_0_Mag",
|
||||
"ACE_20Rnd_762x51_M993_AP_Mag",
|
||||
"ACE_20Rnd_762x51_Mag_SD"
|
||||
};
|
||||
initSpeed = -0.9843;
|
||||
@ -572,8 +585,10 @@ class CfgWeapons {
|
||||
magazines[] = {
|
||||
"20Rnd_762x51_Mag",
|
||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||
"ACE_20Rnd_762x51_Mk319_Mod_0_Mag",
|
||||
"ACE_20Rnd_762x51_M993_AP_Mag",
|
||||
"ACE_20Rnd_762x51_Mag_SD"
|
||||
};
|
||||
initSpeed = -0.9916;
|
||||
|
@ -256,42 +256,6 @@
|
||||
<Italian>Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
|
||||
<Russian>Калибр: 5,56x45 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: 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>
|
||||
<Hungarian>5,56 mm Páncéltörő 30-as Tár</Hungarian>
|
||||
<German>5,56 mm 30-Schuss-Magazin AP</German>
|
||||
<Spanish>Cargador de 30 balas AP de 5,56mm</Spanish>
|
||||
<French>Ch. 5,56mm 30Cps AP</French>
|
||||
<Polish>Magazynek 5,56mm 30rd AP</Polish>
|
||||
<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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_mag_APNameShort">
|
||||
<English>5.56mm AP</English>
|
||||
<Hungarian>5,56 mm Páncéltörő</Hungarian>
|
||||
<German>5,56mm AP</German>
|
||||
<Spanish>5,56mm AP</Spanish>
|
||||
<French>5,56mm AP</French>
|
||||
<Polish>5,56mm AP</Polish>
|
||||
<Czech>5.56mm AP</Czech>
|
||||
<Portuguese>5,56mm AP</Portuguese>
|
||||
<Italian>5.56mm AP</Italian>
|
||||
<Russian>5,56 мм бронебойные</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_mag_APDescription">
|
||||
<English>Caliber: 5.56x45 mm AP<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</English>
|
||||
<Hungarian>Kaliber: 5,56x45 mm Páncéltörő<br />Lövedékek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Hungarian>
|
||||
<German>Kaliber: 5,56x45 mm AP<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</German>
|
||||
<Spanish>Calibre: 5,56x45 mm AP<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Spanish>
|
||||
<French>Calibre: 5,56x45 mm AP<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</French>
|
||||
<Polish>Kaliber: 5,56x45 mm AP<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Polish>
|
||||
<Czech>Ráže: 5.56x45 mm AP<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech>
|
||||
<Portuguese>Calibre: 5,56x45 mm AP<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese>
|
||||
<Italian>Calibro: 5.56x45 mm AP<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
|
||||
<Russian>Калибр: 5,56x45 мм бронебойные<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
|
||||
</Key>
|
||||
<!-- 7.62x51mm -->
|
||||
<Key ID="STR_ACE_20Rnd_762x51_mag_TracerName">
|
||||
<English>7.62mm 20rnd Tracer Mag</English>
|
||||
@ -401,42 +365,6 @@
|
||||
<Italian>Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian>
|
||||
<Russian>Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_mag_APName">
|
||||
<English>7.62mm 20Rnd AP Mag</English>
|
||||
<Hungarian>7,62 mm Páncéltörő 20-as Tár</Hungarian>
|
||||
<German>7,62 mm 20-Schuss-Magazin AP</German>
|
||||
<Spanish>Cargador de 20 balas AP de 7,62mm</Spanish>
|
||||
<French>Ch. 7,62mm 20Cps AP</French>
|
||||
<Polish>Magazynek 7,62mm 20rd AP</Polish>
|
||||
<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>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_mag_APNameShort">
|
||||
<English>7.62mm AP</English>
|
||||
<Hungarian>7,62 mm Páncéltörő</Hungarian>
|
||||
<German>7,62mm AP</German>
|
||||
<Spanish>7,62mm AP</Spanish>
|
||||
<French>7,62mm AP</French>
|
||||
<Polish>7,62mm AP</Polish>
|
||||
<Czech>7.62mm AP</Czech>
|
||||
<Portuguese>7,62mm AP</Portuguese>
|
||||
<Italian>7.62mm AP</Italian>
|
||||
<Russian>7,62 мм бронебойные</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_mag_APDescription">
|
||||
<English>Caliber: 7.62x51 mm AP<br />Rounds: 20<br />Used in: Mk18 ABR</English>
|
||||
<Hungarian>Kaliber: 7,62x51 mm Páncéltörő<br />Lövedékek: 20<br />Használható: Mk18 ABR</Hungarian>
|
||||
<German>Kaliber: 7,62x51 mm AP<br />Patronen: 20<br />Eingesetzt von: EBR</German>
|
||||
<Spanish>Calibre: 7,62x51 mm AP<br />Balas: 20<br />Se usa en: Mk18 ABR</Spanish>
|
||||
<French>Calibre: 7,62x51 mm AP<br />Cartouches: 20<br />Utilisé dans: EBR</French>
|
||||
<Polish>Kaliber: 7,62x51 mm AP<br />Pociski: 20<br />Używane w: Mk18 ABR</Polish>
|
||||
<Czech>Ráže: 7.62x51 mm AP<br />Munice: 20<br />Použití: Mk18 ABR</Czech>
|
||||
<Portuguese>Calibre: 7,62x51 mm AP<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese>
|
||||
<Italian>Calibro: 7.62x51 mm AP<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian>
|
||||
<Russian>Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian>
|
||||
</Key>
|
||||
<!-- .338 Norma Magnum -->
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_TracerName">
|
||||
<English>.338 NM 130Rnd Tracer Belt</English>
|
||||
@ -564,31 +492,6 @@
|
||||
<Spanish>Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus</Spanish>
|
||||
<Russian>Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APName">
|
||||
<English>9.3mm 10Rnd AP Mag</English>
|
||||
<German>9,3mm 10-Schuss-Magazin Hartkern</German>
|
||||
<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>
|
||||
<German>9,3mm AP</German>
|
||||
<Polish>9,3mm AP</Polish>
|
||||
<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<br />Rounds: 10<br />Used in: Cyrus</English>
|
||||
<German>Kaliber: 9,3x64mm Hartkern<br />Schuss: 10<br />Verwendet für: Cyrus</German>
|
||||
<Polish>Kaliber: 9,3x64 mm AP<br />Pociski: 10<br />Używany w: Cyrus</Polish>
|
||||
<French>Calibre: 9.3x64mm AP<br />Cartouches: 10<br />Utilisé dans: Cyrus</French>
|
||||
<Spanish>Calibre: 9.3x64mm AP<br />Balas: 10<br />Se usa en: Cyrus</Spanish>
|
||||
<Russian>Калибр: 9,3x64 мм бронебойные<br />Патронов: 10<br />Используются с: Cyrus</Russian>
|
||||
</Key>
|
||||
<!-- 9.3x64mm 150Rnd Belt-->
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerName">
|
||||
<English>9.3mm 150Rnd Tracer Belt</English>
|
||||
@ -743,7 +646,7 @@
|
||||
<Russian>6,5 мм ИК-трассирующие</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_100Rnd_65x39_caseless_mag_Tracer_DimDescription">
|
||||
<English>6.5mm 100Rnd Tracer IR-DIM Mag</English>
|
||||
<English>6.5mm 100Rnd Tracer IR-DIM Mag<br />Rounds: 100<br />Used in: MX LSW</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>
|
||||
@ -764,7 +667,7 @@
|
||||
<Russian>6,5 мм ИК-трассирующие</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_200Rnd_65x39_cased_Box_Tracer_DimDescription">
|
||||
<English>6.5mm 200Rnd Tracer IR-DIM Belt</English>
|
||||
<English>6.5mm 200Rnd Tracer IR-DIM Belt<br />Rounds: 200<br />Used in: Stoner 99 LMG</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>
|
||||
@ -781,7 +684,7 @@
|
||||
<English>5.56mm Mk262</English>
|
||||
<Polish>5,56mm Mk262</Polish>
|
||||
<French>5.56mm Mk262</French>
|
||||
<Spanish>5.56mm (Mk262)</Spanish>
|
||||
<Spanish>5.56mm Mk262</Spanish>
|
||||
<Russian>5,56 мм Mk262</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Description">
|
||||
@ -793,16 +696,16 @@
|
||||
</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>
|
||||
<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>
|
||||
<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>
|
||||
<Spanish>5.56mm Mk318</Spanish>
|
||||
<Russian>5.56 мм Mk318</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Description">
|
||||
@ -812,6 +715,27 @@
|
||||
<Spanish>Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30</Spanish>
|
||||
<Russian>Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Name">
|
||||
<English>5.56mm 30Rnd Mag (M995 AP)</English>
|
||||
<Polish>Magazynek 5,56mm 30rd (M995 AP)</Polish>
|
||||
<French>5.56mm 30Cps (M995 AP)</French>
|
||||
<Spanish>Cargador de 30 balas de 5.56mm (M995 AP)</Spanish>
|
||||
<Russian>Магазин из 30-ти 5.56 мм (M995 AP)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_NameShort">
|
||||
<English>5.56mm AP</English>
|
||||
<Polish>5,56mm AP</Polish>
|
||||
<French>5.56mm AP</French>
|
||||
<Spanish>5.56mm AP</Spanish>
|
||||
<Russian>5.56 мм AP</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Description">
|
||||
<English>Caliber: 5.56x45 mm NATO (M995 AP)<br />Rounds: 30</English>
|
||||
<Polish>Kaliber: 5,56x45 mm NATO (M995 AP)<br />Pociski: 30</Polish>
|
||||
<French>Calibre: 5.56x45 mm NATO (M995 AP)<br />Cartouches: 30</French>
|
||||
<Spanish>Calibre: 5.56x45 mm NATO (M995 AP)<br />Balas: 30</Spanish>
|
||||
<Russian>Калибр: 5,56x45 мм NATO (M995 AP)<br />Патронов: 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>
|
||||
@ -854,6 +778,48 @@
|
||||
<Spanish>Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 20</Spanish>
|
||||
<Russian>Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 20</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Name">
|
||||
<English>7.62mm 10Rnd Mag (Mk316 Mod 0)</English>
|
||||
<Polish>Magazynek 7,62mm 10rd (Mk316 Mod 0)</Polish>
|
||||
<French>7.62mm 10Cps (Mk316 Mod 0)</French>
|
||||
<Spanish>Cargador de 10 balas de 7.62mm (Mk316 Mod 0)</Spanish>
|
||||
<Russian>Магазин из 10-ти 7,62 мм (Mk316 Mod 0)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_NameShort">
|
||||
<English>7.62mm Mk316</English>
|
||||
<Polish>7,62mm Mk316</Polish>
|
||||
<French>7.62mm Mk316</French>
|
||||
<Spanish>7.62mm Mk316</Spanish>
|
||||
<Russian>7,62 мм Mk316</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Description">
|
||||
<English>Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 10</English>
|
||||
<Polish>Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 10</Polish>
|
||||
<French>Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 10</French>
|
||||
<Spanish>Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 10</Spanish>
|
||||
<Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 10</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Name">
|
||||
<English>7.62mm 20Rnd Mag (Mk316 Mod 0)</English>
|
||||
<Polish>Magazynek 7,62mm 20rd (Mk316 Mod 0)</Polish>
|
||||
<French>7.62mm 20Cps (Mk316 Mod 0)</French>
|
||||
<Spanish>Cargador de 20 balas de 7.62mm (Mk316 Mod 0)</Spanish>
|
||||
<Russian>Магазин из 20-ти 7,62 мм (Mk316 Mod 0)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_NameShort">
|
||||
<English>7.62mm Mk316</English>
|
||||
<Polish>7,62mm Mk316</Polish>
|
||||
<French>7.62mm Mk316</French>
|
||||
<Spanish>7.62mm Mk316</Spanish>
|
||||
<Russian>7,62 мм Mk316</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Description">
|
||||
<English>Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 20</English>
|
||||
<Polish>Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 20</Polish>
|
||||
<French>Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 20</French>
|
||||
<Spanish>Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 20</Spanish>
|
||||
<Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 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>
|
||||
@ -896,6 +862,48 @@
|
||||
<Spanish>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 20</Spanish>
|
||||
<Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_762x51_M993_AP_Mag_Name">
|
||||
<English>7.62mm 10Rnd Mag (M993 AP)</English>
|
||||
<Polish>Magazynek 7,62mm 10rd (M993 AP)</Polish>
|
||||
<French>7.62mm 10Cps (M993 AP)</French>
|
||||
<Spanish>Cargador de 10 balas de 7.62mm (M993 AP)</Spanish>
|
||||
<Russian>Магазин из 10-ти 7,62 мм (M993 AP)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_762x51_M993_AP_Mag_NameShort">
|
||||
<English>7.62mm AP</English>
|
||||
<Polish>7,62mm AP</Polish>
|
||||
<French>7.62mm AP</French>
|
||||
<Spanish>7.62mm AP</Spanish>
|
||||
<Russian>7,62mm AP</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_762x51_M993_AP_Mag_Description">
|
||||
<English>Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 10</English>
|
||||
<Polish>Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 10</Polish>
|
||||
<French>Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 10</French>
|
||||
<Spanish>Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 10</Spanish>
|
||||
<Russian>Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 10</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_M993_AP_Mag_Name">
|
||||
<English>7.62mm 20Rnd Mag (M993 AP)</English>
|
||||
<Polish>Magazynek 7,62mm 20rd (M993 AP)</Polish>
|
||||
<French>7.62mm 20Cps (M993 AP)</French>
|
||||
<Spanish>Cargador de 20 balas de 7.62mm (M993 AP)</Spanish>
|
||||
<Russian>Магазин из 20-ти 7,62 мм (M993 AP)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_M993_AP_Mag_NameShort">
|
||||
<English>7.62mm AP</English>
|
||||
<Polish>7,62mm AP</Polish>
|
||||
<French>7.62mm AP</French>
|
||||
<Spanish>7.62mm AP</Spanish>
|
||||
<Russian>7,62 мм AP</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x51_M993_AP_Mag_Description">
|
||||
<English>Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 20</English>
|
||||
<Polish>Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 20</Polish>
|
||||
<French>Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 20</French>
|
||||
<Spanish>Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 20</Spanish>
|
||||
<Russian>Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 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>
|
||||
@ -967,19 +975,34 @@
|
||||
<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>
|
||||
<English>6.5mm Lapua</English>
|
||||
<French>6.5mm Lapua</French>
|
||||
<Spanish>6.5mm Lapua</Spanish>
|
||||
<Polish>6,5mm Lapua</Polish>
|
||||
<Russian>6,5 мм Lapua</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65x47_Scenar_mag_Description">
|
||||
<English>Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30</English>
|
||||
<English>Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30<br />Used in: MXM</English>
|
||||
<French>Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 30</French>
|
||||
<Spanish>Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30</Spanish>
|
||||
<Polish>Kaliber: 6,5x47 mm (HPBT Scenar)<br />Pociski: 30</Polish>
|
||||
<Russian>Калибр: 6,5x47 мм (HPBT Scenar)<br />Патронов: 30</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65_Creedmor_mag_Name">
|
||||
<English>6.5mm Creedmor 30Rnd Mag</English>
|
||||
<Polish>Magazynek 6,5mm Creedmor 30rd</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65_Creedmor_mag_NameShort">
|
||||
<English>6.5mm CM</English>
|
||||
<French>6.5mm CM</French>
|
||||
<Spanish>6.5mm CM</Spanish>
|
||||
<Polish>6,5mm CM</Polish>
|
||||
<Russian>6,5 мм CM</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_30Rnd_65_Creedmor_mag_Description">
|
||||
<English>Caliber: 6.5mm Creedmor<br />Rounds: 30<br />Used in: MXM</English>
|
||||
<Polish>Kaliber: 6,5mm Creedmor<br />Pociski: 30<br />Używany w: MXM</Polish>
|
||||
</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>
|
||||
@ -1043,6 +1066,24 @@
|
||||
<Polish>Kaliber: 12,7x99 mm<br />Pociski: 5</Polish>
|
||||
<Russian>Калибр: 12,7x99 мм<br />Патронов: 5</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_5Rnd_127x99_API_Mag_Name">
|
||||
<English>12.7x99mm API 5Rnd Mag</English>
|
||||
<French>12.7x99mm API 5Cps</French>
|
||||
<Spanish>Cargador de 5 balas de 12.7x99mm API</Spanish>
|
||||
<Polish>Magazynek 12,7x99mm API 5rd</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_5Rnd_127x99_API_Mag_NameShort">
|
||||
<English>12.7mm API</English>
|
||||
<French>12.7mm API</French>
|
||||
<Spanish>12.7mm API</Spanish>
|
||||
<Polish>12,7mm API</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_5Rnd_127x99_API_Mag_Description">
|
||||
<English>Caliber: 12.7x99mm API<br />Rounds: 5</English>
|
||||
<French>Calibre: 12.7x99mm API<br />Cartouches: 5</French>
|
||||
<Spanish>Calibre: 12.7x99mm API<br />Balas: 5</Spanish>
|
||||
<Polish>Kaliber: 12,7x99 mm API<br />Pociski: 5</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Name">
|
||||
<English>12.7x99mm 5Rnd Mag (AMAX)</English>
|
||||
<French>12.7x99mm 5Rnd Mag (AMAX)</French>
|
||||
|
@ -101,25 +101,20 @@ class CfgVehicles {
|
||||
#define MACRO_LOADUNLOADCAPTIVE \
|
||||
class ACE_Actions { \
|
||||
class ACE_MainActions { \
|
||||
selection = ""; \
|
||||
class ACE_LoadCaptive { \
|
||||
class GVAR(LoadCaptive) { \
|
||||
displayName = "$STR_ACE_Captives_LoadCaptive"; \
|
||||
distance = 4; \
|
||||
condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \
|
||||
statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \
|
||||
exceptions[] = {"isNotEscorting"}; \
|
||||
showDisabled = 0; \
|
||||
priority = 1.2; \
|
||||
hotkey = "L"; \
|
||||
}; \
|
||||
class ACE_UnloadCaptive { \
|
||||
class GVAR(UnloadCaptive) { \
|
||||
displayName = "$STR_ACE_Captives_UnloadCaptive"; \
|
||||
distance = 4; \
|
||||
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \
|
||||
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \
|
||||
showDisabled = 0; \
|
||||
priority = 1.2; \
|
||||
hotkey = "C"; \
|
||||
}; \
|
||||
}; \
|
||||
};
|
||||
|
@ -22,7 +22,7 @@ PARAMS_3(_unit,_target,_state);
|
||||
if (_state) then {
|
||||
if (_unit getVariable [QGVAR(isEscorting), false]) exitWith {};
|
||||
|
||||
[_unit, _target] call EFUNC(common,claim);
|
||||
[_unit, _target, false] call EFUNC(common,claim);
|
||||
_unit setVariable [QGVAR(isEscorting), true, true];
|
||||
|
||||
_target attachTo [_unit, [0, 1, 0]];
|
||||
@ -34,8 +34,7 @@ if (_state) then {
|
||||
{[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);},
|
||||
nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))];
|
||||
|
||||
private "_escortFnc";
|
||||
_escortFnc = {
|
||||
[{
|
||||
EXPLODE_3_PVT((_this select 0),_unit,_target,_actionID);
|
||||
if (_unit getVariable [QGVAR(isEscorting), false]) then {
|
||||
if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then {
|
||||
@ -45,13 +44,12 @@ if (_state) then {
|
||||
|
||||
if (!(_unit getVariable [QGVAR(isEscorting), false])) then {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
[objNull, _target] call EFUNC(common,claim);
|
||||
[objNull, _target, false] call EFUNC(common,claim);
|
||||
detach _target;
|
||||
_unit removeAction _actionID;
|
||||
_unit setVariable [QGVAR(escortedUnit), objNull, true];
|
||||
};
|
||||
};
|
||||
[_escortFnc, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
|
||||
}, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
} else {
|
||||
_unit setVariable [QGVAR(isEscorting), false, true];
|
||||
|
@ -97,14 +97,16 @@ if (!hasInterface) exitWith {};
|
||||
call COMPILE_FILE(scripts\assignedItemFix);
|
||||
call COMPILE_FILE(scripts\initScrollWheel);
|
||||
|
||||
0 spawn {
|
||||
while {true} do {
|
||||
waitUntil {!isNull (findDisplay 46)}; sleep 0.1;
|
||||
findDisplay 46 displayAddEventHandler ["MouseZChanged", QUOTE( _this call GVAR(onScrollWheel) )];
|
||||
[false] call FUNC(disableUserInput);
|
||||
waitUntil {isNull (findDisplay 46)};
|
||||
};
|
||||
DFUNC(mouseZHandler) = {
|
||||
waitUntil {!isNull (findDisplay 46)}; sleep 0.1;
|
||||
findDisplay 46 displayAddEventHandler ["MouseZChanged", QUOTE( _this call GVAR(onScrollWheel) )];
|
||||
[false] call FUNC(disableUserInput);
|
||||
};
|
||||
|
||||
addMissionEventHandler ["Loaded", {[] spawn FUNC(mouseZHandler)}];
|
||||
[] spawn FUNC(mouseZHandler);
|
||||
|
||||
|
||||
enableCamShake true;
|
||||
|
||||
// Set the name for the current player
|
||||
|
@ -22,4 +22,4 @@ if !([_unit, _target, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// a static weapon has to be empty for dragging
|
||||
if ((typeOf _target) isKindOf "StaticWeapon" && {count crew _target > 0}) exitWith {false};
|
||||
|
||||
alive _target && {_target getVariable [QGVAR(canCarry), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLeftLeg") + (_target getHitPointDamage "HitRightLeg") > 0.4})}
|
||||
alive _target && {_target getVariable [QGVAR(canCarry), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})}
|
||||
|
@ -22,4 +22,4 @@ if !([_unit, _target, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// a static weapon has to be empty for dragging
|
||||
if ((typeOf _target) isKindOf "StaticWeapon" && {count crew _target > 0}) exitWith {false};
|
||||
|
||||
alive _target && {_target getVariable [QGVAR(canDrag), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLeftLeg") + (_target getHitPointDamage "HitRightLeg") > 0.4})};
|
||||
alive _target && {_target getVariable [QGVAR(canDrag), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})};
|
@ -35,7 +35,7 @@
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Conditions: specific
|
||||
if !(call FUNC(canUseRangefinder) || FUNC(canUseFCS)) exitWith {false};
|
||||
if !(call FUNC(canUseFCS)) exitWith {false};
|
||||
|
||||
// Statement
|
||||
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), 50] call FUNC(adjustRange);
|
||||
@ -49,7 +49,7 @@
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Conditions: specific
|
||||
if !(call FUNC(canUseRangefinder) || FUNC(canUseFCS)) exitWith {false};
|
||||
if !(call FUNC(canUseFCS)) exitWith {false};
|
||||
|
||||
// Statement
|
||||
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -50] call FUNC(adjustRange);
|
||||
|
@ -6,15 +6,15 @@ class CfgAmmo {
|
||||
//class ace_arty_105mm_m1_m782_time;
|
||||
//class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {};
|
||||
//class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
// GVAR(skip) = 1;
|
||||
//};
|
||||
class Bo_GBU12_LGB;
|
||||
class Nou_GBU12 : Bo_GBU12_LGB {
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
ACE_FRAG_METAL = 140000;
|
||||
ACE_FRAG_CHARGE = 87000;
|
||||
ACE_FRAG_GURNEY_C = 2320;
|
||||
ACE_FRAG_GURNEY_K = 1/2;
|
||||
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
GVAR(metal) = 140000;
|
||||
GVAR(charge) = 87000;
|
||||
GVAR(gurney_c) = 2320;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
sideAirFriction = 0.04;
|
||||
airFriction = 0.04;
|
||||
laserLock = 0;
|
||||
@ -23,68 +23,78 @@ class CfgAmmo {
|
||||
class GrenadeBase;
|
||||
class Grenade;
|
||||
class GrenadeHand: Grenade {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
GVAR(skip) = 0;
|
||||
GVAR(force) = 1;
|
||||
// This is a good high-drag frag type for grenades.
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
|
||||
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||
/*
|
||||
These values are based on the M67 Grenade, should be tweaked for
|
||||
individual grenades.
|
||||
*/
|
||||
ACE_FRAG_METAL = 210; // metal in grams
|
||||
ACE_FRAG_CHARGE = 185; // explosive in grams
|
||||
ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
GVAR(metal) = 210; // metal in grams
|
||||
GVAR(charge) = 185; // explosive in grams
|
||||
GVAR(gurney_c) = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
GVAR(gurney_k) = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
};
|
||||
class GrenadeHand_stone: GrenadeHand {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
GVAR(skip) = 1;
|
||||
};
|
||||
class SmokeShell: GrenadeHand {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
GVAR(skip) = 1;
|
||||
};
|
||||
|
||||
class RocketBase;
|
||||
//class R_Hydra_HE: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
// GVAR(skip) = 1;
|
||||
//};
|
||||
|
||||
//class R_57mm_HE: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
// GVAR(skip) = 1;
|
||||
//};
|
||||
|
||||
class R_80mm_HE: RocketBase {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
GVAR(skip) = 1;
|
||||
};
|
||||
|
||||
//class R_S8T_AT: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
// GVAR(skip) = 1;
|
||||
//};
|
||||
|
||||
class BombCore;
|
||||
class Bo_Mk82: BombCore {
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
ACE_FRAG_METAL = 140000;
|
||||
ACE_FRAG_CHARGE = 87000;
|
||||
ACE_FRAG_GURNEY_C = 2320;
|
||||
ACE_FRAG_GURNEY_K = 1/2;
|
||||
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
GVAR(metal) = 140000;
|
||||
GVAR(charge) = 87000;
|
||||
GVAR(gurney_c) = 2320;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
|
||||
|
||||
class G_40mm_HE: GrenadeBase {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
GVAR(skip) = 0;
|
||||
GVAR(force) = 1;
|
||||
};
|
||||
|
||||
class ACE_G_40mm_HEDP: G_40mm_HE {
|
||||
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||
GVAR(metal) = 200;
|
||||
GVAR(charge) = 45;
|
||||
GVAR(gurney_c) = 2830;
|
||||
GVAR(gurney_k) = 3/5;
|
||||
};
|
||||
class ACE_G_40mm_HE: ACE_G_40mm_HEDP {
|
||||
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||
GVAR(metal) = 200;
|
||||
GVAR(charge) = 32;
|
||||
GVAR(gurney_c) = 2700;
|
||||
GVAR(gurney_k) = 3/5;
|
||||
};
|
||||
class ACE_G_40mm_Practice: ACE_G_40mm_HE {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
GVAR(skip) = 1;
|
||||
};
|
||||
class ACE_G40mm_HE_VOG25P: G_40mm_HE {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
GVAR(skip) = 0;
|
||||
GVAR(force) = 1;
|
||||
};
|
||||
|
||||
// curator ammo entries
|
||||
@ -117,14 +127,14 @@ class CfgAmmo {
|
||||
|
||||
//class R_SMAW_HEDP;
|
||||
//class R_MEEWS_HEDP : R_SMAW_HEDP {
|
||||
// ACE_FRAG_FORCE = 1;
|
||||
// ACE_FRAG_MULTIPLIER = 1.2;
|
||||
// GVAR(force) = 1;
|
||||
// GVAR(multiplier) = 1.2;
|
||||
//};
|
||||
|
||||
//class MissileBase;
|
||||
//class M_Hellfire_AT: MissileBase {
|
||||
// ACE_FRAG_FORCE = 1;
|
||||
// ACE_FRAG_MULTIPLIER = 1.75;
|
||||
// GVAR(force) = 1;
|
||||
// GVAR(multiplier) = 1.75;
|
||||
//};
|
||||
|
||||
/*
|
||||
|
@ -15,11 +15,11 @@ if (!alive _round) then {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
|
||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
||||
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP");
|
||||
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(skip));
|
||||
if(_skip == 0) then {
|
||||
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
|
||||
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
|
||||
_force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE");
|
||||
_force = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(force));
|
||||
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
|
||||
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
|
||||
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;
|
||||
|
@ -1,6 +1,7 @@
|
||||
class CfgMagazines {
|
||||
class HandGrenade;
|
||||
class ACE_HandFlare_Base: HandGrenade {
|
||||
scope = 1;
|
||||
value = 2;
|
||||
nameSoundWeapon = "smokeshell";
|
||||
nameSound = "smokeshell";
|
||||
@ -8,6 +9,8 @@ class CfgMagazines {
|
||||
initSpeed = 22;
|
||||
};
|
||||
class ACE_HandFlare_White: ACE_HandFlare_Base {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
scope = 2;
|
||||
ammo = "ACE_F_Hand_White";
|
||||
displayname = "$STR_ACE_Grenades_M127A1_White_Name";
|
||||
descriptionshort = "$STR_ACE_Grenades_M127A1_White_Description";
|
||||
@ -16,6 +19,8 @@ class CfgMagazines {
|
||||
picture = "\A3\Weapons_F\Data\UI\gear_flare_white_ca.paa";
|
||||
};
|
||||
class ACE_HandFlare_Red: ACE_HandFlare_Base {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
scope = 2;
|
||||
ammo = "ACE_F_Hand_Red";
|
||||
displayname = "$STR_ACE_Grenades_M127A1_Red_Name";
|
||||
descriptionshort = "$STR_ACE_Grenades_M127A1_Red_Description";
|
||||
@ -24,6 +29,8 @@ class CfgMagazines {
|
||||
picture = "\A3\Weapons_F\Data\UI\gear_flare_red_ca.paa";
|
||||
};
|
||||
class ACE_HandFlare_Green: ACE_HandFlare_Base {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
scope = 2;
|
||||
ammo = "ACE_F_Hand_Green";
|
||||
displayname = "$STR_ACE_Grenades_M127A1_Green_Name";
|
||||
descriptionshort = "$STR_ACE_Grenades_M127A1_Green_Description";
|
||||
@ -32,6 +39,8 @@ class CfgMagazines {
|
||||
picture = "\A3\Weapons_F\Data\UI\gear_flare_green_ca.paa";
|
||||
};
|
||||
class ACE_HandFlare_Yellow: ACE_HandFlare_Base {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
scope = 2;
|
||||
ammo = "ACE_F_Hand_Yellow";
|
||||
displayname = "$STR_ACE_Grenades_M127A1_Yellow_Name";
|
||||
descriptionshort = "$STR_ACE_Grenades_M127A1_Yellow_Description";
|
||||
@ -40,20 +49,24 @@ class CfgMagazines {
|
||||
picture = "\A3\Weapons_F\Data\UI\gear_flare_yellow_ca.paa";
|
||||
};
|
||||
class ACE_M84: HandGrenade {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_G_M84";
|
||||
displayname = "$STR_ACE_Grenades_M84_Name";
|
||||
descriptionshort = "$STR_ACE_Grenades_M84_Description";
|
||||
displayNameShort = "M84";
|
||||
mass = 4;
|
||||
model = PATHTOF(models\ACE_m84.p3d);
|
||||
picture = PATHTOF(UI\ACE_m84_x_ca.paa);
|
||||
};
|
||||
|
||||
class 3Rnd_UGL_FlareGreen_F;
|
||||
class 6Rnd_GreenSignal_F: 3Rnd_UGL_FlareGreen_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "F_40mm_Green";
|
||||
initSpeed = 120;
|
||||
};
|
||||
class 6Rnd_RedSignal_F: 6Rnd_GreenSignal_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "F_40mm_Red";
|
||||
initSpeed = 120;
|
||||
};
|
||||
|
@ -80,7 +80,7 @@ _affected = _grenade nearEntities ["CAManBase", 20];
|
||||
|
||||
|
||||
//Add ace_medical pain effect:
|
||||
if ((isClass (configFile >> "CfgPatches" >> "ACE_Medical")) && {_strength > 0}) then {
|
||||
if ((isClass (configFile >> "CfgPatches" >> "ACE_Medical")) && {_strength > 0.1}) then {
|
||||
[ACE_player, (_strength / 2)] call EFUNC(medical,adjustPainLevel);
|
||||
};
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit) );
|
||||
@ -20,9 +19,9 @@ class Extended_Init_EventHandlers {
|
||||
};
|
||||
|
||||
class Extended_FiredNear_EventHandlers {
|
||||
class CAManBase {
|
||||
class AllVehicles {
|
||||
class GVAR(FiredNear) {
|
||||
clientFiredNear = QUOTE( if (GVAR(enableCombatDeafness) && {_this select 0 == ACE_player}) then {_this call FUNC(firedNear)}; );
|
||||
clientFiredNear = QUOTE(_this call FUNC(firedNear););
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -1,7 +1,14 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
GVAR(currentDeafness) = 0;
|
||||
GVAR(newStrength) = 0;
|
||||
GVAR(playerVehAttenuation) = 1;
|
||||
|
||||
// Spawn volume updating process
|
||||
[FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
//Update veh attunation when player veh changes
|
||||
["playerVehicleChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler);
|
||||
["playerTurretChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler);
|
||||
|
@ -10,6 +10,7 @@ PREP(hasEarPlugsIn);
|
||||
PREP(moduleHearing);
|
||||
PREP(putInEarPlugs);
|
||||
PREP(removeEarPlugs);
|
||||
PREP(updatePlayerVehAttenuation);
|
||||
PREP(updateVolume);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -21,18 +21,19 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_firer", "_distance", "_weapon", "_muzzle", "_mode", "_ammo", "_silencer", "_audibleFireCoef", "_loudness", "_strength", "_audibleFire", "_audibleFireTime", "_audibleFireTimeCoef"];
|
||||
private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_firer = _this select 1;
|
||||
_distance = (_this select 2) max 1;
|
||||
_weapon = _this select 3;
|
||||
_muzzle = _this select 4;
|
||||
_mode = _this select 5;
|
||||
_ammo = _this select 6;
|
||||
PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo);
|
||||
|
||||
if (toLower _weapon in ["throw", "put"]) exitWith {};
|
||||
if (_unit != vehicle _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {};
|
||||
//Only run if combatDeafness enabled:
|
||||
if (!GVAR(enableCombatDeafness)) exitWith {};
|
||||
//Only run if firedNear object is player or player's vehicle:
|
||||
if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {};
|
||||
if (_weapon in ["Throw", "Put"]) exitWith {};
|
||||
|
||||
_vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttenuation)};
|
||||
|
||||
if (_distance < 1) then {_distance = 1;};
|
||||
|
||||
_silencer = switch (_weapon) do {
|
||||
case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0};
|
||||
@ -42,18 +43,15 @@ _silencer = switch (_weapon) do {
|
||||
};
|
||||
|
||||
_audibleFireCoef = 1;
|
||||
//_audibleFireTimeCoef = 1;
|
||||
if (_silencer != "") then {
|
||||
_audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire");
|
||||
//_audibleFireTimeCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFireTime");
|
||||
};
|
||||
|
||||
_audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire");
|
||||
//_audibleFireTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFireTime");
|
||||
|
||||
_loudness = _audibleFireCoef * _audibleFire / 64;
|
||||
_strength = _loudness - (_loudness/50 * _distance); // linear drop off
|
||||
_strength = _vehAttenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off
|
||||
|
||||
if (_strength < 0.01) exitWith {};
|
||||
|
||||
[{_this call FUNC(earRinging)}, [_unit, _strength], 0.2, 0] call EFUNC(common,waitAndExecute);
|
||||
[{_this call FUNC(earRinging)}, [ACE_player, _strength], 0.2, 0] call EFUNC(common,waitAndExecute);
|
||||
|
57
addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf
Normal file
57
addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Gets the sound attenuation of a player to the outside.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* Ammount that unit can hear outside <NUMBER>
|
||||
*
|
||||
* Example:
|
||||
* [] call ace_hearing_fnc_updatePlayerVehAttenuation
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
_vehicle = vehicle ACE_player;
|
||||
|
||||
if (isNull _vehicle) exitWith {};
|
||||
|
||||
_newAttenuation = 1;
|
||||
if (ACE_player != _vehicle) then {
|
||||
_effectType = "";
|
||||
_turretPath = [ACE_player] call EFUNC(common,getTurretIndex);
|
||||
_effectType = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "attenuationEffectType");
|
||||
|
||||
if (!(_turretPath isEqualTo [])) then {
|
||||
_turretConfig = [(configFile >> "CfgVehicles" >> (typeOf _vehicle)), _turretPath] call EFUNC(common,getTurretConfigPath);
|
||||
|
||||
if ((getNumber (_turretConfig >> "disableSoundAttenuation")) == 1) then {
|
||||
_effectType = "";
|
||||
} else {
|
||||
if (isText (_turretConfig >> "soundAttenuationTurret")) then {
|
||||
_effectType = getText (_turretConfig >> "soundAttenuationTurret");
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
_newAttenuation = switch (true) do {
|
||||
case (_effectType == ""): {1};
|
||||
case (_effectType == "CarAttenuation"): {0.5};
|
||||
case (_effectType == "RHS_CarAttenuation"): {0.5};
|
||||
case (_effectType == "OpenCarAttenuation"): {1};
|
||||
case (_effectType == "TankAttenuation"): {0.1};
|
||||
case (_effectType == "HeliAttenuation"): {0.3};
|
||||
case (_effectType == "OpenHeliAttenuation"): {0.9};
|
||||
case (_effectType == "SemiOpenHeliAttenuation"): {0.6};
|
||||
case (_effectType == "HeliAttenuationGunner"): {0.85};
|
||||
case (_effectType == "HeliAttenuationRamp"): {0.85};
|
||||
default {1};
|
||||
};
|
||||
};
|
||||
|
||||
TRACE_2("New vehicle attenuation",_vehicle,_newAttenuation);
|
||||
|
||||
GVAR(playerVehAttenuation) = _newAttenuation;
|
@ -3,6 +3,17 @@
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
GVAR(ParsedTextCached) = [];
|
||||
|
||||
//Setup text/shadow color matrix
|
||||
[] call FUNC(setupTextColors);
|
||||
["SettingChanged", {
|
||||
PARAMS_2(_name,_value);
|
||||
if ((_name == QGVAR(colorTextMax)) || {_name == QGVAR(colorTextMin)} || {_name == QGVAR(colorShadowMax)} || {_name == QGVAR(colorShadowMin)}) then {
|
||||
[] call FUNC(setupTextColors);
|
||||
};
|
||||
}] call EFUNC(common,addEventhandler);
|
||||
|
||||
// Install the render EH on the main display
|
||||
addMissionEventHandler ["Draw3D", DFUNC(render)];
|
||||
|
||||
|
@ -8,6 +8,7 @@ PREP(compileMenu);
|
||||
PREP(compileMenuSelfAction);
|
||||
PREP(collectActiveActionTree);
|
||||
PREP(createAction);
|
||||
PREP(ctrlSetParsedTextCached);
|
||||
PREP(findActionNode);
|
||||
PREP(handlePlayerChanged);
|
||||
PREP(isSubPath);
|
||||
@ -21,6 +22,7 @@ PREP(renderBaseMenu);
|
||||
PREP(renderIcon);
|
||||
PREP(renderMenu);
|
||||
PREP(renderSelector);
|
||||
PREP(setupTextColors);
|
||||
PREP(splitPath);
|
||||
|
||||
GVAR(keyDown) = false;
|
||||
|
@ -37,6 +37,30 @@ class ACE_Settings {
|
||||
isClientSettable = 1;
|
||||
displayName = "$STR_ACE_Interact_Menu_UseListMenu";
|
||||
};
|
||||
class GVAR(colorTextMax) {
|
||||
value[] = {1, 1, 1, 1};
|
||||
typeName = "COLOR";
|
||||
isClientSettable = 1;
|
||||
displayName = "$STR_ACE_Interact_Menu_ColorTextMax";
|
||||
};
|
||||
class GVAR(colorTextMin) {
|
||||
value[] = {1, 1, 1, 0.25};
|
||||
typeName = "COLOR";
|
||||
isClientSettable = 1;
|
||||
displayName = "$STR_ACE_Interact_Menu_ColorTextMin";
|
||||
};
|
||||
class GVAR(colorShadowMax) {
|
||||
value[] = {0, 0, 0, 1};
|
||||
typeName = "COLOR";
|
||||
isClientSettable = 1;
|
||||
displayName = "$STR_ACE_Interact_Menu_ColorShadowMax";
|
||||
};
|
||||
class GVAR(colorShadowMin) {
|
||||
value[] = {0, 0, 0, 0.25};
|
||||
typeName = "COLOR";
|
||||
isClientSettable = 1;
|
||||
displayName = "$STR_ACE_Interact_Menu_ColorShadowMin";
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_Extensions {
|
||||
|
@ -53,7 +53,9 @@ _recurseFnc = {
|
||||
if (_condition == "") then {_condition = "true"};
|
||||
|
||||
// Add canInteract (including exceptions) and canInteractWith to condition
|
||||
_condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")];
|
||||
if ((configName _entryCfg) != "ACE_MainActions") then {
|
||||
_condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")];
|
||||
};
|
||||
|
||||
_insertChildren = compile (getText (_entryCfg >> "insertChildren"));
|
||||
_modifierFunction = compile (getText (_entryCfg >> "modifierFunction"));
|
||||
|
@ -0,0 +1,13 @@
|
||||
// by commy2
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ctrl", "_index", "_text"];
|
||||
|
||||
_ctrl = _this select 0;
|
||||
_index = _this select 1;
|
||||
_text = _this select 2;
|
||||
|
||||
if (_text != Str(ARR_SELECT(GVAR(ParsedTextCached),_index,""))) then {
|
||||
GVAR(ParsedTextCached) set [_index, _text];
|
||||
_ctrl ctrlSetStructuredText parseText _text;
|
||||
};
|
@ -41,9 +41,21 @@ if((count _this) > 2) then {
|
||||
};
|
||||
};
|
||||
|
||||
// For non-self actions, exit if the action is too far away
|
||||
// For non-self actions, exit if the action is too far away or ocluded
|
||||
if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player &&
|
||||
{(ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot")) distance _pos >= _distance}) exitWith {false};
|
||||
{
|
||||
private ["_headPos","_actualDistance"];
|
||||
_headPos = ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot");
|
||||
_actualDistance = _headPos distance _pos;
|
||||
|
||||
if (_actualDistance > _distance) exitWith {true};
|
||||
|
||||
if (_distance > 1.0) exitWith {
|
||||
// If distance to action is greater than 1.0 m, check LOS
|
||||
_line = [_headPos call EFUNC(common,positionToASL), _pos call EFUNC(common,positionToASL), _object, ACE_player];
|
||||
lineIntersects _line
|
||||
};
|
||||
}) exitWith {false};
|
||||
|
||||
// Exit if the action is behind you
|
||||
_sPos = if (count _pos != 2) then {
|
||||
|
@ -4,12 +4,11 @@
|
||||
*
|
||||
* Argument:
|
||||
* 0: Text <STRING>
|
||||
* 1: Color <STRING>
|
||||
* 1: Icon <STRING>
|
||||
* 2: 2d position <ARRAY>
|
||||
* 3: ?
|
||||
* 4: ?
|
||||
* 5: ?
|
||||
* 6: Icon <STRING>
|
||||
* 3: Color <STRING>
|
||||
* 4: Shadow Color <STRING>
|
||||
* 5: Icon Color <STRING>
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
@ -18,11 +17,8 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#define DEFAULT_ICON QUOTE(\z\ace\addons\interaction\ui\dot_ca.paa)
|
||||
private ["_color", "_sPos", "_ctrl", "_icon"];
|
||||
_text = _this select 0;
|
||||
_color = _this select 1;
|
||||
_sPos = _this select 2;
|
||||
_icon = _this select 6;
|
||||
private ["_ctrl"];
|
||||
PARAMS_6(_text,_icon,_sPos,_textColor,_shadowColor,_iconColor);
|
||||
|
||||
//systemChat format ["Icon %1 - %2,%3", _text, _sPos select 0, _sPos select 1];
|
||||
|
||||
@ -31,22 +27,23 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
|
||||
GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
|
||||
};
|
||||
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
||||
GVAR(iconCount) = GVAR(iconCount) + 1;
|
||||
if(_icon == "") then {
|
||||
_icon = DEFAULT_ICON;
|
||||
};
|
||||
|
||||
_text = if (GVAR(UseListMenu)) then {
|
||||
format ["<img image='%1' color='%2' align='left'/><t color='%3' size='0.80' shadow='1' shadowColor='#000000' shadowOffset='0.07'>%4</t>", _icon, _color, _color, _text]
|
||||
format ["<img image='%1' color='%2' align='left'/><t color='%3' size='0.80' shadow='2' shadowColor='%4' shadowOffset='0.06'>%5</t>", _icon, _iconColor, _textColor, _shadowColor, _text]
|
||||
} else {
|
||||
format ["<img image='%1' color='%2' align='center'/><br/><t color='%3' size='0.80' align='center' shadow='1' shadowColor='#000000' shadowOffset='0.07'>%4</t>", _icon, _color, _color, "ace_breakLine" callExtension _text];
|
||||
format ["<img image='%1' color='%2' align='center'/><br/><t color='%3' size='0.80' align='center' shadow='2' shadowColor='%4' shadowOffset='0.06'>%5</t>", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text];
|
||||
};
|
||||
|
||||
_ctrl ctrlSetStructuredText (parseText _text);
|
||||
_text = if (GVAR(UseListMenu)) then {
|
||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW];
|
||||
//_ctrl ctrlSetStructuredText parseText _text;
|
||||
[_ctrl, GVAR(iconCount), _text] call FUNC(ctrlSetParsedTextCached);
|
||||
GVAR(iconCount) = GVAR(iconCount) + 1;
|
||||
|
||||
if (GVAR(UseListMenu)) then {
|
||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW];
|
||||
} else {
|
||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW];
|
||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW];
|
||||
};
|
||||
//_ctrl ctrlSetBackgroundColor [0, 1, 0, 0.1];
|
||||
_ctrl ctrlCommit 0;
|
||||
|
@ -45,19 +45,17 @@ _menuInSelectedPath = true;
|
||||
|
||||
// Render icon
|
||||
// ARGB Color (First Hex Pair is transparancy)
|
||||
_color = "#FFFFFFFF";
|
||||
_textColor = GVAR(colorSelected);
|
||||
_shadowColor = GVAR(colorSelectedShadow);
|
||||
if(!_menuInSelectedPath) then {
|
||||
if (_menuDepth > 0) then {
|
||||
_color = format ["#%1FFFFFF", [255 * ((((count _path) - 1)/_menuDepth) max 0.25)] call EFUNC(common,toHex)];
|
||||
} else {
|
||||
_color = format ["#%1FFFFFF", [255 * 0.75] call EFUNC(common,toHex)];
|
||||
};
|
||||
_textColor = (GVAR(colorNotSelectedMatrix) select (count _path)) select _menuDepth;
|
||||
_shadowColor = (GVAR(colorShadowNotSelectedMatrix) select (count _path)) select _menuDepth;
|
||||
};
|
||||
|
||||
//END_COUNTER(constructing_colors);
|
||||
//BEGIN_COUNTER(fnc_renderIcons);
|
||||
|
||||
[_actionData select 1, _color, _sPos, 1, 1, 0, _actionData select 2, 0.5, 0.025, "TahomaB"] call FUNC(renderIcon);
|
||||
[_actionData select 1, _actionData select 2, _sPos, _textColor, _shadowColor, "#FFFFFFFF"] call FUNC(renderIcon);
|
||||
|
||||
//END_COUNTER(fnc_renderIcons);
|
||||
|
||||
|
@ -22,14 +22,14 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
|
||||
|
||||
private "_ctrl";
|
||||
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
||||
GVAR(iconCount) = GVAR(iconCount) + 1;
|
||||
|
||||
if (GVAR(UseListMenu)) then {
|
||||
_ctrl ctrlSetStructuredText (parseText format ["<img image='%1' color='#FF0000' size='1.6'/>", _icon]);
|
||||
[_ctrl, GVAR(iconCount), format ["<img image='%1' color='#FF0000' size='1.6'/>", _icon]] call FUNC(ctrlSetParsedTextCached);
|
||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.014*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.05*SafeZoneW, 0.035*SafeZoneW];
|
||||
} else {
|
||||
_ctrl ctrlSetStructuredText (parseText format ["<img image='%1' color='#FF0000' size='1.6' align='center'/>", _icon]);
|
||||
[_ctrl, GVAR(iconCount), format ["<img image='%1' color='#FF0000' size='1.6' align='center'/>", _icon]] call FUNC(ctrlSetParsedTextCached);
|
||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.050*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.1*SafeZoneW, 0.035*SafeZoneW];
|
||||
};
|
||||
//_ctrl ctrlSetBackgroundColor [1, 0, 0, 0.1];
|
||||
GVAR(iconCount) = GVAR(iconCount) + 1;
|
||||
_ctrl ctrlCommit 0;
|
||||
|
52
addons/interact_menu/functions/fnc_setupTextColors.sqf
Normal file
52
addons/interact_menu/functions/fnc_setupTextColors.sqf
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Builds color strings needed for displaying interaction text
|
||||
*
|
||||
* Argument:
|
||||
* None
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_mixColor", "_rowT", "_rowS", "_menuDepth", "_pathCount", "_menuInSelectedPath", "_color", "_path"];
|
||||
|
||||
//Mixes 2 colors (number arrays) and makes a color string "#AARRGGBB" for structured text
|
||||
_mixColor = {
|
||||
PARAMS_3(_color1,_color2,_ratio);
|
||||
private ["_return", "_mix", "_index"];
|
||||
_return = "";
|
||||
for "_index" from 0 to 3 do {
|
||||
_mix = linearConversion [0, 1, _ratio, (_color1 select _index), (_color2 select _index)];
|
||||
if (_index != 3) then {
|
||||
_return = _return + ([255 * _mix] call EFUNC(common,toHex));
|
||||
} else {
|
||||
_return = "#" + ([255 * _mix] call EFUNC(common,toHex)) + _return;
|
||||
};
|
||||
};
|
||||
_return
|
||||
};
|
||||
|
||||
GVAR(colorSelected) = [GVAR(colorTextMin), GVAR(colorTextMax), 1] call _mixColor;
|
||||
GVAR(colorSelectedShadow) = [GVAR(colorShadowMin), GVAR(colorShadowMax), 1] call _mixColor;
|
||||
GVAR(colorNotSelectedMatrix) = [];
|
||||
GVAR(colorShadowNotSelectedMatrix) = [];
|
||||
|
||||
for "_pathCount" from 0 to 15 do {
|
||||
_rowT = [];
|
||||
_rowS = [];
|
||||
for "_menuDepth" from 0 to 15 do {
|
||||
if (_menuDepth > 0) then {
|
||||
_rowT pushBack ([GVAR(colorTextMin), GVAR(colorTextMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor);
|
||||
_rowS pushBack ([GVAR(colorShadowMin), GVAR(colorShadowMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor);
|
||||
} else {
|
||||
_rowT pushBack ([GVAR(colorTextMin), GVAR(colorTextMax), 0] call _mixColor);
|
||||
_rowS pushBack ([GVAR(colorShadowMin), GVAR(colorShadowMax), 0] call _mixColor);
|
||||
};
|
||||
};
|
||||
GVAR(colorNotSelectedMatrix) pushBack _rowT;
|
||||
GVAR(colorShadowNotSelectedMatrix) pushBack _rowS;
|
||||
};
|
@ -17,6 +17,7 @@
|
||||
<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>
|
||||
<Polish>Zawsze wyświetlaj kursor dla interakcji</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_UseListMenu">
|
||||
<English>Display interaction menus as lists</English>
|
||||
@ -71,5 +72,21 @@
|
||||
<Hungarian>Járműves cselekvések</Hungarian>
|
||||
<Italian>Interazioni con veicoli</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_ColorTextMax">
|
||||
<English>Interaction - Text Max</English>
|
||||
<Polish>Interakcja - Tekst max</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_ColorTextMin">
|
||||
<English>Interaction - Text Min</English>
|
||||
<Polish>Interakcja - Tekst min</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_ColorShadowMax">
|
||||
<English>Interaction - Shadow Max</English>
|
||||
<Polish>Interakcja - Cień max</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_ColorShadowMin">
|
||||
<English>Interaction - Shadow Min</English>
|
||||
<Polish>Interakcja - Cień min</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -27,7 +27,7 @@ class CfgVehicles {
|
||||
class ACE_Actions {
|
||||
class ACE_MainActions {
|
||||
displayName = "$STR_ACE_Interaction_MainAction";
|
||||
distance = 5;
|
||||
distance = 4;
|
||||
condition = QUOTE(true);
|
||||
statement = "";
|
||||
icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa";
|
||||
@ -35,7 +35,6 @@ class CfgVehicles {
|
||||
|
||||
class ACE_TeamManagement {
|
||||
displayName = "$STR_ACE_Interaction_TeamManagement";
|
||||
distance = 5;
|
||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)});
|
||||
statement = "";
|
||||
showDisabled = 0;
|
||||
@ -45,7 +44,6 @@ class CfgVehicles {
|
||||
|
||||
class ACE_JoinTeamRed {
|
||||
displayName = "$STR_ACE_Interaction_JoinTeamRed";
|
||||
distance = 5;
|
||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||
statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam));
|
||||
showDisabled = 1;
|
||||
@ -55,7 +53,6 @@ class CfgVehicles {
|
||||
};
|
||||
class ACE_JoinTeamGreen {
|
||||
displayName = "$STR_ACE_Interaction_JoinTeamGreen";
|
||||
distance = 5;
|
||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||
statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam));
|
||||
showDisabled = 1;
|
||||
@ -65,7 +62,6 @@ class CfgVehicles {
|
||||
};
|
||||
class ACE_JoinTeamBlue {
|
||||
displayName = "$STR_ACE_Interaction_JoinTeamBlue";
|
||||
distance = 5;
|
||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||
statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam));
|
||||
showDisabled = 1;
|
||||
@ -75,7 +71,6 @@ class CfgVehicles {
|
||||
};
|
||||
class ACE_JoinTeamYellow {
|
||||
displayName = "$STR_ACE_Interaction_JoinTeamYellow";
|
||||
distance = 5;
|
||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||
statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam));
|
||||
showDisabled = 1;
|
||||
@ -86,7 +81,6 @@ class CfgVehicles {
|
||||
|
||||
class ACE_LeaveTeam {
|
||||
displayName = "$STR_ACE_Interaction_LeaveTeam";
|
||||
distance = 5;
|
||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'});
|
||||
statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam));
|
||||
showDisabled = 1;
|
||||
@ -98,7 +92,6 @@ class CfgVehicles {
|
||||
|
||||
class ACE_JoinGroup {
|
||||
displayName = "$STR_ACE_Interaction_JoinGroup";
|
||||
distance = 5;
|
||||
condition = QUOTE(side group _player == side group _target && {group _player != group _target});
|
||||
statement = QUOTE([_player] joinSilent group _target;);
|
||||
showDisabled = 0;
|
||||
@ -109,7 +102,6 @@ class CfgVehicles {
|
||||
|
||||
class ACE_GetDown {
|
||||
displayName = "$STR_ACE_Interaction_GetDown";
|
||||
distance = 5;
|
||||
condition = QUOTE([_target] call DFUNC(canInteractWithCivilian));
|
||||
statement = QUOTE([_target] call DFUNC(getDown));
|
||||
showDisabled = 0;
|
||||
@ -117,7 +109,6 @@ class CfgVehicles {
|
||||
};
|
||||
class ACE_SendAway {
|
||||
displayName = "$STR_ACE_Interaction_SendAway";
|
||||
distance = 5;
|
||||
condition = QUOTE([_target] call DFUNC(canInteractWithCivilian));
|
||||
statement = QUOTE([_target] call DFUNC(sendAway));
|
||||
showDisabled = 0;
|
||||
@ -125,7 +116,6 @@ class CfgVehicles {
|
||||
};
|
||||
class ACE_Pardon {
|
||||
displayName = "$STR_ACE_Interaction_Pardon";
|
||||
distance = 5;
|
||||
condition = QUOTE(rating _target < -2000 && {alive _target} && {side group _player == side group _target});
|
||||
statement = QUOTE([ARR_3(_target,'{_this addRating -rating _this}',_target)] call DEFUNC(common,execRemoteFnc));
|
||||
showDisabled = 0;
|
||||
|
@ -24,6 +24,10 @@ _actionTrees = missionNamespace getVariable [_varName, []];
|
||||
|
||||
_actions = [];
|
||||
// Mount unit MainActions menu
|
||||
_actions pushBack [(_actionTrees select 0) select 0, (_actionTrees select 0) select 1, _unit];
|
||||
|
||||
{
|
||||
EXPLODE_2_PVT(_x,_actionData,_children);
|
||||
_actions pushBack [_actionData, _children, _unit];
|
||||
} forEach ((_actionTrees select 0) select 1);
|
||||
|
||||
_actions
|
||||
|
@ -9,7 +9,9 @@ private["_apos", "_aposX", "_aposY", "_args", "_boundsInput", "_bpos", "_canFire
|
||||
private["_constraintLeft", "_constraintRight", "_constraintTop", "_currentTarget", "_fireDisabledEH"];
|
||||
private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"];
|
||||
private["_offsetX", "_offsetY", "_pos", "_randomLockInterval", "_randomPosWithinBounds", "_range"];
|
||||
private["_runTime", "_soundTime", "_targetArray", "_zamerny"];
|
||||
private["_runTime", "_soundTime", "_targetArray", "_zamerny", "_currentShooter"];
|
||||
|
||||
_currentShooter = (vehicle ACE_player);
|
||||
|
||||
#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5
|
||||
#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5
|
||||
@ -128,7 +130,7 @@ FUNC(disableFire) = {
|
||||
|
||||
if(_firedEH < 0 && difficulty > 0) then {
|
||||
_firedEH = [ACE_player, "DefaultAction", {true}, {
|
||||
_canFire = ACE_player getVariable["ace_missileguidance_target", nil];
|
||||
_canFire = _this getVariable["ace_missileguidance_target", nil];
|
||||
if(!isNil "_canFire") exitWith { false };
|
||||
true
|
||||
}] call EFUNC(common,addActionEventHandler);
|
||||
@ -155,7 +157,7 @@ if (isNull _newTarget) then {
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
__JavelinIGUITargetingConstraints ctrlShow false;
|
||||
|
||||
ACE_player setVariable ["ace_missileguidance_target",nil, false];
|
||||
_currentShooter setVariable ["ace_missileguidance_target",nil, false];
|
||||
|
||||
// Disallow fire
|
||||
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
|
||||
@ -212,7 +214,7 @@ if (isNull _newTarget) then {
|
||||
|
||||
{_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR];
|
||||
|
||||
ACE_player setVariable["ace_missileguidance_target", _currentTarget, false];
|
||||
_currentShooter setVariable["ace_missileguidance_target", _currentTarget, false];
|
||||
|
||||
// Allow fire
|
||||
_fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire);
|
||||
@ -227,7 +229,7 @@ if (isNull _newTarget) then {
|
||||
__JavelinIGUITargetingConstrains ctrlShow true;
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
|
||||
ACE_player setVariable["ace_missileguidance_target", nil, false];
|
||||
_currentShooter setVariable["ace_missileguidance_target", nil, false];
|
||||
|
||||
_boundsInput = if (_currentTarget isKindOf "CAManBase") then {
|
||||
[_newTarget,[-1,-1,-2],_currentTarget selectionPosition "body"];
|
||||
@ -270,7 +272,7 @@ if (isNull _newTarget) then {
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
__JavelinIGUITargetingConstraints ctrlShow false;
|
||||
|
||||
ACE_player setVariable ["ace_missileguidance_target",nil, false];
|
||||
_currentShooter setVariable ["ace_missileguidance_target",nil, false];
|
||||
|
||||
// Disallow fire
|
||||
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
|
||||
@ -287,4 +289,4 @@ _args set[3, _lockTime];
|
||||
_args set[4, _soundTime];
|
||||
_args set[6, _fireDisabledEH];
|
||||
|
||||
uiNamespace setVariable[QGVAR(arguments), _args ];
|
||||
uiNamespace setVariable[QGVAR(arguments), _args ];
|
||||
|
@ -33,7 +33,8 @@ uiNameSpace setVariable [QGVAR(arguments),
|
||||
|
||||
|
||||
_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil];
|
||||
if(isNil "_pfh_handle") then {
|
||||
_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle];
|
||||
};
|
||||
if(!isNil "_pfh_handle") then {
|
||||
[] call FUNC(onOpticUnload); // Unload optic if it was already loaded
|
||||
};
|
||||
_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle];
|
||||
|
@ -14,7 +14,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_playerDir", "_windSpeed", "_windDir", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"];
|
||||
private ["_playerDir", "_windSpeed", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"];
|
||||
|
||||
if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then {
|
||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2);
|
||||
|
@ -42,9 +42,7 @@ if (GVAR(Kestrel4500) && dialog) then {
|
||||
|
||||
GVAR(Overlay) = true;
|
||||
|
||||
[{
|
||||
private ["_outputData", "_updateTimer"];
|
||||
|
||||
[{
|
||||
// abort condition
|
||||
if (!GVAR(Overlay) || {!(("ACE_Kestrel4500" in (uniformItems ACE_player)) || ("ACE_Kestrel4500" in (vestItems ACE_player)))}) exitWith {
|
||||
GVAR(Overlay) = false;
|
||||
@ -55,6 +53,7 @@ GVAR(Overlay) = true;
|
||||
if (diag_tickTime > GVAR(updateTimer)) then {
|
||||
GVAR(updateTimer) = diag_tickTime + 1;
|
||||
|
||||
private ["_outputData"];
|
||||
_outputData = [] call FUNC(generateOutputData);
|
||||
|
||||
3 cutRsc ["RscKestrel4500", "PLAIN", 1, false];
|
||||
|
@ -14,7 +14,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_playerDir", "_textTop", "_textCenterBig", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_temperature", "_humidity", "_windSpeed", "_windDir", "_newWindSpeed", "_windSource", "_height"];
|
||||
private ["_playerDir", "_textTop", "_textCenterBig", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_temperature", "_humidity", "_windSpeed", "_windDir"];
|
||||
|
||||
[] call FUNC(collectData);
|
||||
|
||||
|
@ -53,4 +53,4 @@ _structuredOutputText = _structuredOutputText + format ["<img align='center' siz
|
||||
// } forEach (magazinesAmmoFull ACE_player);
|
||||
// _structuredOutputText = _structuredOutputText + format [("<t align='center'>" + (localize "STR_ACE_MagazineRepack_RepackedMagazinesCount") + "</t>"), _fullMags, _partialMags];
|
||||
|
||||
[parseText _structuredOutputText] call EFUNC(common,displayTextStructured);
|
||||
[parseText _structuredOutputText, 2] call EFUNC(common,displayTextStructured);
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="MagazineRepack">
|
||||
<Key ID="STR_ACE_MagazineRepack_RepackMagazines">
|
||||
@ -66,7 +67,7 @@
|
||||
<German>%1 volle(s) Magazin(e) und %2 übrig gebliebene Patrone(n)</German>
|
||||
<Spanish>%1 cargador(es) completo(s) y %2 bala(s) extra(s)</Spanish>
|
||||
<French>%1 chargeur(s) plein(s) et %2 cartouche(s) en rab</French>
|
||||
<Polish>Pełnych magazynków: %1.<br /> Dodatkowych naboi: %2.</Polish>
|
||||
<Polish>Pełnych magazynków: %1.<br/>Dodatkowych naboi: %2.</Polish>
|
||||
<Czech>%1 plný zásobník(y) a %2 munice navíc</Czech>
|
||||
<Italian>%1 caricatore/i pieno e %2 munizioni extra</Italian>
|
||||
<Portuguese>%1 carregador(es) cheio(s) e %2 disparo(s) a mais</Portuguese>
|
||||
@ -102,9 +103,9 @@
|
||||
<Spanish>%1 Total y %2 Parcial</Spanish>
|
||||
<Russian>%1 полных и %2 неполных</Russian>
|
||||
<Czech>%1 plný a %2 částečně</Czech>
|
||||
<Polish>Pełnych: %1.<br />Częściowo pełnych: %2.</Polish>
|
||||
<Polish>Pełnych: %1.<br/>Częściowo pełnych: %2.</Polish>
|
||||
<Hungarian>%1 teljes és %2 részleges</Hungarian>
|
||||
<Italian>%1 pieno e %2 parziale</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -1,6 +1,11 @@
|
||||
#include "\x\cba\addons\main\script_macros_common.hpp"
|
||||
#include "\x\cba\addons\xeh\script_xeh.hpp"
|
||||
|
||||
//Faster Array Unwraping (skips the IS_ARRAY check normaly found in EXPLODE_1_SYS)
|
||||
#undef EXPLODE_2_SYS
|
||||
#define EXPLODE_1_SYS_FAST(ARRAY,A) A =(ARRAY) select 0
|
||||
#define EXPLODE_2_SYS(ARRAY,A,B) EXPLODE_1_SYS_FAST(ARRAY,A); B = (ARRAY) select 1
|
||||
|
||||
// Default versioning level
|
||||
#define DEFAULT_VERSIONING_LEVEL 2
|
||||
|
||||
|
@ -72,7 +72,7 @@ _vehicle = vehicle _unit;
|
||||
// Do not obscure the map if the player is on a enclosed vehicle (assume internal illumination)
|
||||
if (_vehicle != _unit) then {
|
||||
// Player is in a vehicle
|
||||
if (isTurnedOut _unit && {_vehicle isKindOf "Tank" || {_vehicle isKindOf "Wheeled_APC"}}) then {
|
||||
if (isTurnedOut _unit && { _vehicle isKindOf "Tank" || { ( _vehicle isKindOf "Helicopter" || _vehicle isKindOf "Plane" ) && { (driver _vehicle) == _unit || { (gunner _vehicle) == _unit } } } || {_vehicle isKindOf "Wheeled_APC"}}) then {
|
||||
_isEnclosed = true;
|
||||
};
|
||||
};
|
||||
|
@ -3,6 +3,7 @@ class ACE_Head {
|
||||
displayName = "$STR_ACE_Interaction_Head";
|
||||
runOnHover = 1;
|
||||
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
EXCEPTIONS
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
@ -70,11 +71,18 @@ class ACE_Head {
|
||||
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment));
|
||||
EXCEPTIONS
|
||||
};
|
||||
class Diagnose: CheckPulse {
|
||||
displayName = "Diagnose";
|
||||
condition = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(canTreatCached));
|
||||
statement = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(treatment));
|
||||
EXCEPTIONS
|
||||
};
|
||||
};
|
||||
class ACE_Torso {
|
||||
displayName = "$STR_ACE_Interaction_Torso";
|
||||
runOnHover = 1;
|
||||
statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
EXCEPTIONS
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
@ -175,6 +183,7 @@ class ACE_ArmLeft {
|
||||
displayName = "$STR_ACE_Interaction_ArmLeft";
|
||||
runOnHover = 1;
|
||||
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
EXCEPTIONS
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
@ -332,6 +341,7 @@ class ACE_ArmRight {
|
||||
displayName = "$STR_ACE_Interaction_ArmRight";
|
||||
runOnHover = 1;
|
||||
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
EXCEPTIONS
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
@ -486,6 +496,7 @@ class ACE_LegLeft {
|
||||
displayName = "$STR_ACE_Interaction_LegLeft";
|
||||
runOnHover = 1;
|
||||
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
EXCEPTIONS
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
@ -628,6 +639,7 @@ class ACE_LegRight {
|
||||
displayName = "$STR_ACE_Interaction_LegRight";
|
||||
runOnHover = 1;
|
||||
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
EXCEPTIONS
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
|
@ -12,6 +12,7 @@ class Medical {
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
exceptions[] = {"isNotInside"};
|
||||
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
runOnHover = 1;
|
||||
|
||||
@ -80,6 +81,7 @@ class Medical {
|
||||
runOnHover = 1;
|
||||
exceptions[] = {"isNotInside"};
|
||||
statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
showDisabled = 1;
|
||||
priority = 2;
|
||||
hotkey = "";
|
||||
@ -148,6 +150,7 @@ class Medical {
|
||||
runOnHover = 1;
|
||||
exceptions[] = {"isNotInside"};
|
||||
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
|
||||
@ -249,6 +252,7 @@ class Medical {
|
||||
runOnHover = 1;
|
||||
exceptions[] = {"isNotInside"};
|
||||
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
|
||||
@ -346,6 +350,7 @@ class Medical {
|
||||
runOnHover = 1;
|
||||
exceptions[] = {"isNotInside"};
|
||||
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
|
||||
@ -432,6 +437,7 @@ class Medical {
|
||||
runOnHover = 1;
|
||||
exceptions[] = {"isNotInside"};
|
||||
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
||||
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
|
||||
condition = "true";
|
||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||
|
||||
|
@ -71,14 +71,14 @@ class ACE_Medical_Actions {
|
||||
itemConsumed = 1;
|
||||
litter[] = {};
|
||||
};
|
||||
class CheckPulse: Bandage {
|
||||
displayName = "";
|
||||
displayNameProgress = "";
|
||||
class Diagnose: Bandage {
|
||||
displayName = "Diagnose";
|
||||
displayNameProgress = "Diagnosing...";
|
||||
treatmentLocations[] = {"All"};
|
||||
requiredMedic = 0;
|
||||
treatmentTime = 2;
|
||||
treatmentTime = 1;
|
||||
items[] = {};
|
||||
callbackSuccess = QUOTE(DFUNC(actionCheckPulse));
|
||||
callbackSuccess = QUOTE(DFUNC(actionDiagnose));
|
||||
callbackFailure = "";
|
||||
callbackProgress = "";
|
||||
animationPatient = "";
|
||||
@ -86,12 +86,6 @@ class ACE_Medical_Actions {
|
||||
itemConsumed = 0;
|
||||
litter[] = {};
|
||||
};
|
||||
class CheckBloodPressure: CheckPulse {
|
||||
callbackSuccess = QUOTE(DFUNC(actionCheckBloodPressure));
|
||||
};
|
||||
class CheckResponse: CheckPulse {
|
||||
callbackSuccess = QUOTE(DFUNC(actionCheckResponse));
|
||||
};
|
||||
};
|
||||
|
||||
class Advanced {
|
||||
|
@ -7,6 +7,7 @@ PREP(actionCheckBloodPressureLocal);
|
||||
PREP(actionCheckPulse);
|
||||
PREP(actionCheckPulseLocal);
|
||||
PREP(actionCheckResponse);
|
||||
PREP(actionDiagnose);
|
||||
PREP(actionPlaceInBodyBag);
|
||||
PREP(actionRemoveTourniquet);
|
||||
PREP(actionLoadUnit);
|
||||
@ -55,6 +56,7 @@ PREP(isInMedicalVehicle);
|
||||
PREP(isMedic);
|
||||
PREP(isMedicalVehicle);
|
||||
PREP(itemCheck);
|
||||
PREP(modifyMedicalAction);
|
||||
PREP(onMedicationUsage);
|
||||
PREP(onWoundUpdateRequest);
|
||||
PREP(onPropagateWound);
|
||||
|
41
addons/medical/functions/fnc_actionDiagnose.sqf
Normal file
41
addons/medical/functions/fnc_actionDiagnose.sqf
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Action for diagnosing in basic medical
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The medic <OBJECT>
|
||||
* 1: The patient <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* NONE
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller","_target","_title","_content"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
|
||||
_genericMessages = ["STR_ACE_MEDICAL_diagnoseMessage"];
|
||||
|
||||
_genericMessages pushBack ([_target] call EFUNC(common,getName));
|
||||
if (alive _target) then {
|
||||
_genericMessages pushback "STR_ACE_MEDICAL_diagnoseAlive";
|
||||
} else {
|
||||
_genericMessages pushback "STR_ACE_MEDICAL_diagnoseDead";
|
||||
};
|
||||
if (_target getvariable[QGVAR(hasLostBlood), false]) then {
|
||||
_genericMessages pushback "STR_ACE_MEDICAL_lostBlood";
|
||||
} else {
|
||||
_genericMessages pushback "STR_ACE_MEDICAL_noBloodloss";
|
||||
};
|
||||
|
||||
if (_target getvariable[QGVAR(hasPain), false]) then {
|
||||
_genericMessages pushback "STR_ACE_MEDICAL_inPain";
|
||||
} else {
|
||||
_genericMessages pushback "STR_ACE_MEDICAL_noPain";
|
||||
};
|
||||
|
||||
["displayTextStructured", [_caller], [_genericMessages, 3.0, _caller]] call EFUNC(common,targetEvent);
|
@ -14,6 +14,8 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
// Exit for basic medical
|
||||
if (GVAR(level) < 2) exitWith {};
|
||||
private ["_target", "_show", "_selectionN"];
|
||||
_target = _this select 0;
|
||||
_show = if (count _this > 1) then {_this select 1} else {true};
|
||||
|
40
addons/medical/functions/fnc_modifyMedicalAction.sqf
Normal file
40
addons/medical/functions/fnc_modifyMedicalAction.sqf
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Author: esteldunedain
|
||||
* Modify the visuals of a medical action point.
|
||||
* On Basic medical: modify the icon color based on damage on that body part.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The Patient Unit <OBJECT>
|
||||
* 1: The Diagnosing Unit <OBJECT>
|
||||
* 2: Selection Number <NUMBER>
|
||||
* 3: The action to modify <OBJECT>
|
||||
*
|
||||
* ReturnValue:
|
||||
* nil
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_4_PVT(_this,_target,_player,_selectionN,_actionData);
|
||||
if (GVAR(level) < 2) exitwith {
|
||||
private ["_pointDamage"];
|
||||
_pointDamage = _target getHitPointDamage (["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] select _selectionN);
|
||||
|
||||
if (_pointDamage >= 0.8) exitWith {
|
||||
_actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))];
|
||||
};
|
||||
if (_pointDamage > 0) exitWith {
|
||||
_actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossYellow.paa))];
|
||||
};
|
||||
};
|
||||
|
||||
private ["_openWounds", "_amountOf"];
|
||||
_openWounds = _target getvariable [QGVAR(openWounds), []];
|
||||
{
|
||||
_amountOf = _x select 3;
|
||||
if (_amountOf > 0 && {(_selectionN == (_x select 2))}) exitwith {
|
||||
_actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))];
|
||||
};
|
||||
}foreach _openWounds;
|
@ -1,13 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Medical">
|
||||
<Key ID="TR_ACE_Medical_litterSimulationDetail">
|
||||
<Key ID="STR_ACE_Medical_litterSimulationDetail">
|
||||
<English>Litter Simulation Detail</English>
|
||||
<Polish>Detale zużytych medykamentów</Polish>
|
||||
<Spanish>Detalle de simulación de basura</Spanish>
|
||||
</Key>
|
||||
<Key ID="TR_ACE_Medical_litterSimulationDetail_Desc">
|
||||
<Key ID="STR_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>
|
||||
<Spanish>Detalle simulación de basura establece el número de artículos de basura que se generan a nivel local en el cliente. Las cantidades excesivas en áreas locales podrían causar caída de rendimiento, así que esto es un ajuste de cliente únicamente.</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Inject_Atropine">
|
||||
<English>Inject Atropine</English>
|
||||
@ -1320,6 +1322,28 @@
|
||||
<Hungarian>Megnézted %1-t</Hungarian>
|
||||
<Italian>Hai controllato %1</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MEDICAL_diagnoseMessage">
|
||||
<English>Patient %1<br/>is %2.<br/>%3.<br/>%4</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MEDICAL_diagnoseAlive">
|
||||
<English>alive</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MEDICAL_diagnoseDead">
|
||||
<English>dead</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MEDICAL_lostBlood">
|
||||
<English>He's lost some blood</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MEDICAL_noBloodloss">
|
||||
<English>He hasn't lost blood</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MEDICAL_inPain">
|
||||
<English>He is in pain</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MEDICAL_noPain">
|
||||
<English>He is not in pain</English>
|
||||
</Key>
|
||||
|
||||
<Key ID="STR_ACE_MEDICAL_BANDAGED">
|
||||
<English>Bandaged</English>
|
||||
<French>Bandé</French>
|
||||
@ -1634,4 +1658,4 @@
|
||||
<French>Aberration chromatique</French>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
</Project>
|
BIN
addons/medical/ui/icons/medical_crossRed.paa
Normal file
BIN
addons/medical/ui/icons/medical_crossRed.paa
Normal file
Binary file not shown.
BIN
addons/medical/ui/icons/medical_crossYellow.paa
Normal file
BIN
addons/medical/ui/icons/medical_crossYellow.paa
Normal file
Binary file not shown.
@ -49,11 +49,11 @@ if (GVAR(currentApplicationPage) == 1) then {
|
||||
|
||||
} else { //Map Mode:
|
||||
if (GVAR(mapAutoTrackPosition)) then {
|
||||
_theMap ctrlMapAnimAdd [0, (GVAR(mapZoom)/_mapSize), GVAR(gpsPositionASL)];
|
||||
_theMap ctrlMapAnimAdd [0, (GVAR(mapZoom)/_mapSize), (getPosASL ace_player)];
|
||||
ctrlMapAnimCommit _theMap;
|
||||
};
|
||||
_size = 48 * _mapSize;
|
||||
_theMap drawIcon [QUOTE(PATHTO_R(images\icon_self.paa)), [0.533,0.769,0.76,0.75], GVAR(gpsPositionASL), _size, _size, (getDir ace_player), '', 0 ];
|
||||
_theMap drawIcon [QUOTE(PATHTO_R(images\icon_self.paa)), [0.533,0.769,0.76,0.75], (getPosASL ace_player), _size, _size, (getDir ace_player), '', 0 ];
|
||||
|
||||
if (GVAR(settingShowAllWaypointsOnMap)) then {
|
||||
_size = 32 * _mapSize;
|
||||
|
@ -83,7 +83,6 @@ if ((_oldShowMode == DISPLAY_MODE_CLOSED) && {GVAR(currentShowMode) != DISPLAY_M
|
||||
};
|
||||
[_pfID] call CBA_fnc_removePerFrameHandler;
|
||||
} else {
|
||||
GVAR(gpsPositionASL) = getPosAsl ace_player;
|
||||
if (GVAR(currentShowMode) == DISPLAY_MODE_HIDDEN) then {
|
||||
//If display is hidden, and we can show, then swithc modes:
|
||||
if ([DISPLAY_MODE_DISPLAY] call FUNC(canShow)) then {
|
||||
|
@ -44,7 +44,7 @@ case (APP_MODE_INFODISPLAY): {
|
||||
(_display displayCtrl IDC_MODEDISPLAY_NORTHING) ctrlSetText _northingText;
|
||||
|
||||
//Elevation:
|
||||
_numASL = (GVAR(gpsPositionASL) select 2) + GVAR(mapAltitude);
|
||||
_numASL = ((getPosASL ace_player) select 2) + GVAR(mapAltitude);
|
||||
_aboveSeaLevelText = [_numASL, 5, 0] call CBA_fnc_formatNumber;
|
||||
_aboveSeaLevelText = if (_numASL > 0) then {"+" + _aboveSeaLevelText + " MSL"} else {_aboveSeaLevelText + " MSL"};
|
||||
(_display displayCtrl IDC_MODEDISPLAY_ELEVATIONNUM) ctrlSetText _aboveSeaLevelText;
|
||||
@ -88,13 +88,13 @@ case (APP_MODE_INFODISPLAY): {
|
||||
};
|
||||
|
||||
if (!(_targetPosLocationASL isEqualTo [])) then {
|
||||
_bearing = [GVAR(gpsPositionASL), _targetPosLocationASL] call BIS_fnc_dirTo;
|
||||
_bearing = [(getPosASL ace_player), _targetPosLocationASL] call BIS_fnc_dirTo;
|
||||
_bearingText = if (GVAR(settingUseMils)) then {
|
||||
[(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber;
|
||||
} else {
|
||||
([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
|
||||
};
|
||||
_2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000;
|
||||
_2dDistanceKm = (((getPosASL ace_player) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000;
|
||||
_rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)];
|
||||
_numASL = (_targetPosLocationASL select 2) + GVAR(mapAltitude);
|
||||
_aboveSeaLevelText = [_numASL, 5, 0] call CBA_fnc_formatNumber;
|
||||
@ -125,7 +125,7 @@ case (APP_MODE_COMPASS): {
|
||||
(_display displayCtrl IDC_MODECOMPASS_RANGE) ctrlSetText "";
|
||||
(_display displayCtrl IDC_MODECOMPASS_TARGET) ctrlSetText "";
|
||||
} else {
|
||||
_playerPos2d = GVAR(gpsPositionASL) select [0,2];
|
||||
_playerPos2d = (getPosASL ace_player) select [0,2];
|
||||
|
||||
_targetPosName = "";
|
||||
_targetPosLocationASL = [];
|
||||
@ -145,13 +145,13 @@ case (APP_MODE_COMPASS): {
|
||||
_rangeText = "---";
|
||||
|
||||
if (!(_targetPosLocationASL isEqualTo [])) then {
|
||||
_bearing = [GVAR(gpsPositionASL), _targetPosLocationASL] call BIS_fnc_dirTo;
|
||||
_bearing = [(getPosASL ace_player), _targetPosLocationASL] call BIS_fnc_dirTo;
|
||||
_bearingText = if (GVAR(settingUseMils)) then {
|
||||
[(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber;
|
||||
} else {
|
||||
([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
|
||||
};
|
||||
_2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000;
|
||||
_2dDistanceKm = (((getPosASL ace_player) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000;
|
||||
_rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)];
|
||||
};
|
||||
|
||||
@ -169,7 +169,7 @@ case (APP_MODE_WAYPOINTS): {
|
||||
{
|
||||
EXPLODE_2_PVT(_x,_wpName,_wpPos);
|
||||
_wpListBox lbAdd _wpName;
|
||||
_2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_wpPos select [0,2])) / 1000;
|
||||
_2dDistanceKm = (((getPosASL ace_player) select [0,2]) distance (_wpPos select [0,2])) / 1000;
|
||||
_wpListBox lbSetTextRight [_forEachIndex, (format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)])];
|
||||
} forEach _waypoints;
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
<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>
|
||||
<Spanish>Guía de misiles avanzada, o AMG en sus siglas en inglés, ofrece múltiples mejoras en el fijado y disparo de misiles. Es también un framework requerido para armas de tipo misil.</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Hydra70_DAGR">
|
||||
<English>Hydra-70 DAGR Missile</English>
|
||||
|
1
addons/mk6mortar/$PBOPREFIX$
Normal file
1
addons/mk6mortar/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\Addons\mk6mortar
|
17
addons/mk6mortar/CfgEventHandlers.hpp
Normal file
17
addons/mk6mortar/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,17 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) );
|
||||
};
|
||||
};
|
||||
class Extended_FiredBIS_EventHandlers {
|
||||
class Mortar_01_base_F {
|
||||
class ADDON {
|
||||
firedBIS = QUOTE(_this call FUNC(handleFired));
|
||||
};
|
||||
};
|
||||
};
|
83
addons/mk6mortar/CfgVehicles.hpp
Normal file
83
addons/mk6mortar/CfgVehicles.hpp
Normal file
@ -0,0 +1,83 @@
|
||||
class CfgVehicles {
|
||||
class Man;
|
||||
class CAManBase: Man {
|
||||
class ACE_SelfActions {
|
||||
class ACE_Equipment {
|
||||
class GVAR(rangetable) {
|
||||
displayName = "$STR_ACE_MK6MORTAR_rangetable_action";
|
||||
condition = QUOTE(_this call FUNC(rangeTableCanUse));
|
||||
statement = QUOTE(_this call FUNC(rangeTableOpen));
|
||||
priority = 0;
|
||||
icon = QUOTE(PATHTOF(UI\icon_rangeTable.paa));
|
||||
exceptions[] = {"notOnMap", "isNotInside"};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class LandVehicle;
|
||||
class StaticWeapon: LandVehicle {
|
||||
class Turrets {
|
||||
class MainTurret;
|
||||
};
|
||||
};
|
||||
class StaticMortar: StaticWeapon {
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
};
|
||||
};
|
||||
};
|
||||
class Mortar_01_base_F: StaticMortar {
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
turretInfoType = "ACE_Mk6_RscWeaponRangeArtillery";
|
||||
};
|
||||
};
|
||||
class ACE_SelfActions {
|
||||
class GVAR(toggleMils) {
|
||||
displayName = "Toggle MILS";
|
||||
condition = QUOTE(true);
|
||||
statement = QUOTE(_this call FUNC(toggleMils));
|
||||
exceptions[] = {};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Logic;
|
||||
class Module_F: Logic {
|
||||
class ModuleDescription {};
|
||||
};
|
||||
class GVAR(module): Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "MK6 Settings";
|
||||
function = QFUNC(moduleInit);
|
||||
scope = 2;
|
||||
isGlobal = 0;
|
||||
icon = QUOTE(PATHTOF(UI\Icon_Module_mk6_ca.paa));
|
||||
functionPriority = 0;
|
||||
class Arguments {
|
||||
class airResistanceEnabled {
|
||||
displayName = "Air Resitance";
|
||||
description = "For Player Shots, Model Air Restiance and Wind Effects";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 1;
|
||||
};
|
||||
class allowComputerRangefinder {
|
||||
displayName = "Allow MK6 Computer";
|
||||
description = "Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance)";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 0;
|
||||
};
|
||||
class allowCompass {
|
||||
displayName = "Allow MK6 Compass";
|
||||
description = "Show the MK6 Digital Compass";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 1;
|
||||
};
|
||||
};
|
||||
class ModuleDescription: ModuleDescription {
|
||||
description = "";
|
||||
};
|
||||
};
|
||||
};
|
15
addons/mk6mortar/CfgWeapons.hpp
Normal file
15
addons/mk6mortar/CfgWeapons.hpp
Normal file
@ -0,0 +1,15 @@
|
||||
class CfgWeapons {
|
||||
class ACE_ItemCore;
|
||||
class InventoryItem_Base_F;
|
||||
|
||||
class ACE_RangeTable_82mm: ACE_ItemCore {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
scope = 2;
|
||||
displayName = "$STR_ACE_MK6MORTAR_rangetable_name";
|
||||
descriptionShort = "$STR_ACE_MK6MORTAR_rangetable_description";
|
||||
picture = QUOTE(PATHTOF(UI\icon_rangeTable.paa));
|
||||
class ItemInfo: InventoryItem_Base_F {
|
||||
mass = 0.5;
|
||||
};
|
||||
};
|
||||
};
|
10
addons/mk6mortar/README.md
Normal file
10
addons/mk6mortar/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
ace_mk6mortar
|
||||
==========
|
||||
|
||||
Tweaks the mk6 mortar from Arma3
|
||||
|
||||
## Maintainers
|
||||
|
||||
The people responsible for merging changes to this component or answering potential questions.
|
||||
|
||||
- [PabstMirror](https://github.com/PabstMirror)
|
44
addons/mk6mortar/RscInGameUI.hpp
Normal file
44
addons/mk6mortar/RscInGameUI.hpp
Normal file
@ -0,0 +1,44 @@
|
||||
class RscInGameUI {
|
||||
class RscWeaponRangeArtillery {
|
||||
class CA_IGUI_elements_group: RscControlsGroup {};
|
||||
};
|
||||
class ACE_Mk6_RscWeaponRangeArtillery: RscWeaponRangeArtillery {
|
||||
onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_Mk6_RscWeaponRangeArtillery',(_this select 0))]; _this call FUNC(turretDisplayLoaded););
|
||||
controls[] = {"ACE_MILS_GROUP", "CA_IGUI_elements_group","CA_RangeElements_group"};
|
||||
class ACE_MILS_GROUP: CA_IGUI_elements_group {
|
||||
idc = 80170;
|
||||
class controls {
|
||||
class CA_Heading_MILS: RscText {
|
||||
idc = 80156;
|
||||
style = 2;
|
||||
colorText[] = {0.706,0.0745,0.0196,1};
|
||||
sizeEx = "0.028*SafezoneH";
|
||||
shadow = 0;
|
||||
font = "EtelkaMonospacePro";
|
||||
text = "015";
|
||||
x = "25.0 * (0.01875 * SafezoneH)";
|
||||
y = "6.3 * (0.025 * SafezoneH)";
|
||||
w = "3.3333 * (0.01875 * SafezoneH)";
|
||||
h = "1 * (0.025 * SafezoneH)";
|
||||
};
|
||||
class CA_Elev_MILS: RscText {
|
||||
idc = 80175;
|
||||
style = 1;
|
||||
sizeEx = "0.038*SafezoneH";
|
||||
colorText[] = {0.706,0.0745,0.0196,1};
|
||||
shadow = 0;
|
||||
font = "EtelkaMonospacePro";
|
||||
text = "80.5";
|
||||
x = "36.8 * (0.01875 * SafezoneH)";
|
||||
y = "29.3 * (0.025 * SafezoneH)";
|
||||
w = "5.2 * (0.01875 * SafezoneH)";
|
||||
h = "1.2 * (0.025 * SafezoneH)";
|
||||
};
|
||||
class CA_Elev_Need_MILS: CA_Elev_MILS {
|
||||
idc = 80176;
|
||||
y = "30.8 * (0.025 * SafezoneH)";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
87
addons/mk6mortar/RscRangeTable.hpp
Normal file
87
addons/mk6mortar/RscRangeTable.hpp
Normal file
@ -0,0 +1,87 @@
|
||||
class ACE_82mm_RangeTable_Dialog {
|
||||
idd = -1;
|
||||
movingEnable = 1;
|
||||
onLoad = "uiNamespace setVariable ['ACE_82mm_RangeTable_Dialog', _this select 0];";
|
||||
objects[] = {};
|
||||
|
||||
class ControlsBackground {
|
||||
class TableBackground: RscPicture {
|
||||
idc = -1;
|
||||
text = QUOTE(PATHTOF(UI\RangeTable_background.paa));
|
||||
x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||
w = "16.2634559672906 * (safeZoneH / 40)";
|
||||
h = "23 * ((safeZoneH / 1.2) / 25)";
|
||||
colorBackground[] = {1,1,1,1};
|
||||
};
|
||||
class ChargeBackground: RscText {
|
||||
idc = -1;
|
||||
x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||
w = "4 * (safeZoneH / 40)";
|
||||
h = "5 * ((safeZoneH / 1.2) / 25)";
|
||||
colorBackground[] = {0,0,0,1};
|
||||
};
|
||||
};
|
||||
class controls {
|
||||
class TheTable: RscListNBox {
|
||||
idc = 20001;
|
||||
// style = ST_CENTER + ST_MULTI + LB_TEXTURES;
|
||||
// style = ST_LEFT + ST_MULTI + LB_TEXTURES;
|
||||
// style = LB_MULTI + ST_LEFT; // Style
|
||||
x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||
y = "3.76 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||
w = "16.2634559672906 * (safeZoneH / 40)";
|
||||
h = "20.24 * ((safeZoneH / 1.2) / 25)";
|
||||
columns[] = {(10/867),(86/867),(171/867),(238/867),(320/867),(405/867),
|
||||
(485/867),(546/867),(607/867),(668/867),(729/867),(790/867)};
|
||||
rowHeight = 0.015 * safeZoneH;
|
||||
sizeEx = "0.014 * safeZoneH";
|
||||
font = "EtelkaMonospacePro";
|
||||
drawSideArrows = 1;
|
||||
idcLeft = 14124;
|
||||
idcRight = 412343243;
|
||||
colorText[] = {0, 0, 0, 1};
|
||||
shadow = "0";
|
||||
// colorBorder[] = {1,0,0,1};
|
||||
// colorBackground[] = {1, 0, 0, 1};
|
||||
colorSelectBackground[] = {0, 0, 0, 0.025};
|
||||
colorSelectBackground2[] = {0, 0, 0, 0.025};
|
||||
colorScrollbar[] = {0.95,0,0.95,1};
|
||||
class ListScrollBar: ScrollBar{
|
||||
color[] = {0,0,0,0.6};
|
||||
};
|
||||
};
|
||||
class ChargeListBox: RscListbox {
|
||||
idc = 1501;
|
||||
style = ST_RIGHT;
|
||||
x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||
w = "4 * (safeZoneH / 40)";
|
||||
h = "5 * ((safeZoneH / 1.2) / 25)";
|
||||
onLBSelChanged = QUOTE(_this call FUNC(rangeTablePageChange));
|
||||
};
|
||||
class CloseBackground: RscText {
|
||||
idc = -1;
|
||||
x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||
w = "0.5 * (safeZoneH / 40)";
|
||||
h = "0.5 * ((safeZoneH / 1.2) / 25)";
|
||||
colorBackground[] = {0,0,0,0.5};
|
||||
};
|
||||
class CloseActiveText: RscActiveText {
|
||||
idc = -1;
|
||||
style = 48;
|
||||
color[] = {1,1,1,0.7};
|
||||
text = "A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa";
|
||||
x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||
w = "0.5 * (safeZoneH / 40)";
|
||||
h = "0.5 * ((safeZoneH / 1.2) / 25)";
|
||||
colorText[] = {1,1,1,0.7};
|
||||
colorActive[] = {1,1,1,1};
|
||||
tooltip = "Close";
|
||||
onButtonClick = "closeDialog 0";
|
||||
};
|
||||
};
|
||||
};
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user