mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' into medicalExtension
This commit is contained in:
commit
8ec57a985c
14
.travis.yml
Normal file
14
.travis.yml
Normal file
@ -0,0 +1,14 @@
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
language: python
|
||||
python:
|
||||
- "3.4"
|
||||
before_script:
|
||||
- pip install pygithub
|
||||
- pip install pygithub3
|
||||
script:
|
||||
- python3 tools/deploy.py
|
||||
env:
|
||||
global:
|
||||
- secure: "KcJQbknBOdC5lA4nFGKPXVRVIGLDXDRzC8XkHuXJCE9pIR/wbxbkvx8fHKcC6SC9eHgzneC3+o4m4+CjIbVvIwDgslRbJ8Y59i90ncONmdoRx1HUYHwuYWVZm9HJFjCsIbrEqhSyyKS+PB3WZVOLbErtNHsgS8f43PTh5Ujg7Vg="
|
@ -29,6 +29,7 @@ Walter Pearce <jaynus@gmail.com>
|
||||
ACCtomeek <tomeek99@gmail.com>
|
||||
Adanteh
|
||||
aeroson
|
||||
alef <alefor@gmail.com>
|
||||
Aggr094 <bastards4glory@gmail.com>
|
||||
Alganthe <alganthe@live.fr>
|
||||
Anthariel <Contact@storm-simulation.com>
|
||||
@ -93,3 +94,4 @@ Bla1337
|
||||
nikolauska <nikolauska1@gmail.com>
|
||||
adam3adam <br.ada@seznam.cz>
|
||||
Professor <lukas.trneny@wo.cz>
|
||||
Dharma Bellamkonda <dharma.bellamkonda@gmail.com>
|
||||
|
Binary file not shown.
Binary file not shown.
BIN
ace_fcs.dll
BIN
ace_fcs.dll
Binary file not shown.
1
addons/advanced_ballistics/$PBOPREFIX$
Normal file
1
addons/advanced_ballistics/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\advanced_ballistics
|
@ -2,7 +2,7 @@ class CfgVehicles {
|
||||
class ACE_Module;
|
||||
class GVAR(ModuleSettings): ACE_Module {
|
||||
scope = 2;
|
||||
displayName = "Advanced Ballistics";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_DisplayName";
|
||||
icon = QUOTE(PATHTOF(UI\Icon_Module_Wind_ca.paa));
|
||||
category = "ACE";
|
||||
function = QUOTE(DFUNC(initModuleSettings));
|
||||
@ -12,26 +12,26 @@ class CfgVehicles {
|
||||
author = "Ruthberg";
|
||||
class Arguments {
|
||||
class enabled {
|
||||
displayName = "Advanced Ballistics";
|
||||
description = "Enables advanced ballistics";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_enabled_DisplayName";
|
||||
description = "$STR_ACE_AdvancedBallistics_enabled_Description";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 0;
|
||||
};
|
||||
class alwaysSimulateForSnipers {
|
||||
displayName = "Always Enabled For Snipers";
|
||||
description = "Always enables advanced ballistics when high power optics are used";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_DisplayName";
|
||||
description = "$STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_Description";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 1;
|
||||
};
|
||||
class disabledInFullAutoMode {
|
||||
displayName = "Disabled In FullAuto Mode";
|
||||
description = "Disables the advanced ballistics during full auto fire";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_disabledInFullAutoMod_DisplayName";
|
||||
description = "$STR_ACE_AdvancedBallistics_disabledInFullAutoMod_Description";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 0;
|
||||
};
|
||||
class onlyActiveForLocalPlayers {
|
||||
displayName = "Disabled For Non Local Players";
|
||||
description = "Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer)";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_DisplayName";
|
||||
description = "$STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_Description";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 1;
|
||||
};
|
||||
@ -44,35 +44,38 @@ class CfgVehicles {
|
||||
};
|
||||
*/
|
||||
class ammoTemperatureEnabled {
|
||||
displayName = "Enable Ammo Temperature Simulation";
|
||||
description = "Muzzle velocity varies with ammo temperature";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_DisplayName";
|
||||
description = "$STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_Description";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 1;
|
||||
};
|
||||
class barrelLengthInfluenceEnabled {
|
||||
displayName = "Enable Barrel Length Simulation";
|
||||
description = "Muzzle velocity varies with barrel length";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_DisplayName";
|
||||
description = "$STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_Description";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 1;
|
||||
};
|
||||
class bulletTraceEnabled {
|
||||
displayName = "Enable Bullet Trace Effect";
|
||||
description = "Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_bulletTraceEnabled_DisplayName";
|
||||
description = "$STR_ACE_AdvancedBallistics_bulletTraceEnabled_Description";
|
||||
typeName = "BOOL";
|
||||
defaultValue = 1;
|
||||
};
|
||||
class simulationInterval {
|
||||
displayName = "Simulation Interval";
|
||||
description = "Defines the interval between every calculation step";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_simulationInterval_DisplayName";
|
||||
description = "$STR_ACE_AdvancedBallistics_simulationInterval_Description";
|
||||
typeName = "NUMBER";
|
||||
defaultValue = 0.0;
|
||||
};
|
||||
class simulationRadius {
|
||||
displayName = "Simulation Radius";
|
||||
description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles";
|
||||
displayName = "$STR_ACE_AdvancedBallistics_simulationRadius_DisplayName";
|
||||
description = "$STR_ACE_AdvancedBallistics_simulationRadius_Description";
|
||||
typeName = "NUMBER";
|
||||
defaultValue = 3000;
|
||||
};
|
||||
};
|
||||
class ModuleDescription {
|
||||
description = "$STR_ACE_AdvancedBallistics_Description";
|
||||
};
|
||||
};
|
||||
};
|
@ -4,24 +4,11 @@
|
||||
|
||||
GVAR(currentbulletID) = -1;
|
||||
|
||||
GVAR(bulletDatabase) = [];
|
||||
GVAR(bulletDatabaseStartTime) = [];
|
||||
GVAR(bulletDatabaseSpeed) = [];
|
||||
GVAR(bulletDatabaseFrames) = [];
|
||||
GVAR(bulletDatabaseLastFrame) = [];
|
||||
GVAR(bulletDatabaseHDeflect) = [];
|
||||
GVAR(bulletDatabaseSpinDrift) = [];
|
||||
GVAR(bulletDatabaseOccupiedIndices) = [];
|
||||
GVAR(bulletDatabaseFreeIndices) = [];
|
||||
|
||||
GVAR(WindInfo) = false;
|
||||
GVAR(WindInfoStart) = time;
|
||||
|
||||
GVAR(Protractor) = false;
|
||||
GVAR(ProtractorStart) = time;
|
||||
|
||||
GVAR(currentGrid) = 0;
|
||||
GVAR(INIT_MESSAGE_ENABLED) = false;
|
||||
GVAR(initMessageEnabled) = false;
|
||||
|
||||
GVAR(extensionAvailable) = true;
|
||||
/* @TODO: Remove this until versioning is in sync with cmake/build versioning
|
||||
|
@ -6,12 +6,12 @@ PREP(calculateAmmoTemperatureVelocityShift);
|
||||
PREP(calculateAtmosphericCorrection);
|
||||
PREP(calculateBarrelLengthVelocityShift);
|
||||
PREP(calculateRetardation);
|
||||
PREP(calculateRoughnessLength);
|
||||
PREP(calculateStabilityFactor);
|
||||
PREP(calculateWindSpeed);
|
||||
PREP(displayProtractor);
|
||||
PREP(handleFired);
|
||||
PREP(initializeTerrainExtension);
|
||||
PREP(initModuleSettings);
|
||||
PREP(readAmmoDataFromConfig);
|
||||
PREP(readWeaponDataFromConfig);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Calculates the ammo temperature induced muzzle velocity shift
|
||||
*
|
||||
* Arguments:
|
||||
* 0: ammo - classname <string>
|
||||
* 0: muzzle velocity shift lookup table - m/s <ARRAY>
|
||||
* 1: temperature - degrees celcius <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
@ -15,17 +15,11 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ammo", "_temperature", "_muzzleVelocityTable", "_muzzleVelocityShift", "_temperatureIndexA", "_temperatureIndexB", "_temperatureRatio"];
|
||||
_ammo = _this select 0;
|
||||
_temperature = _this select 1;
|
||||
private ["_muzzleVelocityShiftTable", "_temperature", "_muzzleVelocityShift", "_temperatureIndexA", "_temperatureIndexB", "_temperatureRatio"];
|
||||
_muzzleVelocityShiftTable = _this select 0;
|
||||
_temperature = _this select 1;
|
||||
|
||||
_muzzleVelocityTable = [];
|
||||
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ammoTempMuzzleVelocityShifts")) then {
|
||||
_muzzleVelocityTable = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ammoTempMuzzleVelocityShifts");
|
||||
};
|
||||
|
||||
if (count _muzzleVelocityTable != 11) exitWith { 0 };
|
||||
if (count _muzzleVelocityShiftTable != 11) exitWith { 0 };
|
||||
|
||||
_temperatureIndexA = floor((_temperature + 15) / 5);
|
||||
_temperatureIndexA = 0 max _temperatureIndexA;
|
||||
@ -37,6 +31,6 @@ _temperatureIndexB = _temperatureIndexB min 10;
|
||||
|
||||
_temperatureRatio = ((_temperature + 15) / 5) - floor((_temperature + 15) / 5);
|
||||
|
||||
_muzzleVelocityShift = (_muzzleVelocityTable select _temperatureIndexA) * (1 - _temperatureRatio) + (_muzzleVelocityTable select _temperatureIndexB) * _temperatureRatio;
|
||||
_muzzleVelocityShift = (_muzzleVelocityShiftTable select _temperatureIndexA) * (1 - _temperatureRatio) + (_muzzleVelocityShiftTable select _temperatureIndexB) * _temperatureRatio;
|
||||
|
||||
_muzzleVelocityShift
|
||||
|
@ -4,9 +4,10 @@
|
||||
* Calculates the muzzle velocity shift caused by different barrel lengths
|
||||
*
|
||||
* Arguments:
|
||||
* 0: ammo - classname <string>
|
||||
* 0: weapon - classname <string>
|
||||
* 1: muzzle velocity - m/s <NUMBER>
|
||||
* 0: barrel length - mm
|
||||
* 1: muzzle velocity lookup table - m/s <ARRAY>
|
||||
* 2: barrel length lookup table - mm <ARRAY>
|
||||
* 3: muzzle velocity - m/s <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: muzzle velocity shift - m/s <NUMBER>
|
||||
@ -16,25 +17,13 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ammo", "_weapon", "_barrelLength", "_muzzleVelocityTable", "_barrelLengthTable", "_muzzleVelocity", "_lowerIndex", "_upperIndex", "_barrelLengthRatio", "_muzzleVelocityNew"];
|
||||
_ammo = _this select 0;
|
||||
_weapon = _this select 1;
|
||||
_muzzleVelocity = _this select 2;
|
||||
|
||||
_barrelLength = getNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_barrelLength");
|
||||
private ["_barrelLength", "_muzzleVelocityTable", "_barrelLengthTable", "_muzzleVelocity", "_lowerIndex", "_upperIndex", "_barrelLengthRatio", "_muzzleVelocityNew"];
|
||||
_barrelLength = _this select 0;
|
||||
_muzzleVelocityTable = _this select 1;
|
||||
_barrelLengthTable = _this select 2;
|
||||
_muzzleVelocity = _this select 3;
|
||||
|
||||
if (_barrelLength == 0) exitWith { 0 };
|
||||
|
||||
_muzzleVelocityTable = [];
|
||||
_barrelLengthTable = [];
|
||||
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_muzzleVelocities")) then {
|
||||
_muzzleVelocityTable = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_muzzleVelocities");
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_barrelLengths")) then {
|
||||
_barrelLengthTable = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_barrelLengths");
|
||||
};
|
||||
|
||||
if (count _muzzleVelocityTable != count _barrelLengthTable) exitWith { 0 };
|
||||
if (count _muzzleVelocityTable == 0 || count _barrelLengthTable == 0) exitWith { 0 };
|
||||
if (count _muzzleVelocityTable == 1) exitWith { (_muzzleVelocityTable select 0) - _muzzleVelocity };
|
||||
|
@ -4,10 +4,10 @@
|
||||
* Calculates the stability factor of a bullet
|
||||
*
|
||||
* Arguments:
|
||||
* 0: caliber - inches <NUMBER>
|
||||
* 1: bullet length - inches <NUMBER>
|
||||
* 2: bullet mass - grains <NUMBER>
|
||||
* 3: barrel twist - inches <NUMBER>
|
||||
* 0: caliber - mm <NUMBER>
|
||||
* 1: bullet length - mm <NUMBER>
|
||||
* 2: bullet mass - grams <NUMBER>
|
||||
* 3: barrel twist - mm <NUMBER>
|
||||
* 4: muzzle velocity shift - m/s <NUMBER>
|
||||
* 5: temperature - degrees celcius <NUMBER>
|
||||
* 6: barometric Pressure - hPA <NUMBER>
|
||||
@ -17,6 +17,7 @@
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caliber", "_bulletLength", "_bulletMass", "_barrelTwist", "_muzzleVelocity", "_temperature", "_barometricPressure", "_l", "_t", "_stabilityFactor"];
|
||||
_caliber = _this select 0;
|
||||
@ -31,15 +32,14 @@ _barometricPressure = _this select 6;
|
||||
_t = _barrelTwist / _caliber;
|
||||
_l = _bulletLength / _caliber;
|
||||
|
||||
_stabilityFactor = 30 * _bulletMass / (_t^2 * _caliber^3 * _l * (1 + _l^2));
|
||||
_stabilityFactor = 7587000 * _bulletMass / (_t^2 * _caliber^3 * _l * (1 + _l^2));
|
||||
|
||||
_muzzleVelocity = _muzzleVelocity * 3.2808399;
|
||||
if (_muzzleVelocity > 1120) then {
|
||||
_stabilityFactor = _stabilityFactor * (_muzzleVelocity / 2800) ^ (1/3);
|
||||
if (_muzzleVelocity > 341.376) then {
|
||||
_stabilityFactor = _stabilityFactor * (_muzzleVelocity / 853.44) ^ (1/3);
|
||||
} else {
|
||||
_stabilityFactor = _stabilityFactor * (_muzzleVelocity / 1120) ^ (1/3);
|
||||
_stabilityFactor = _stabilityFactor * (_muzzleVelocity / 341.376) ^ (1/3);
|
||||
};
|
||||
|
||||
_stabilityFactor = _stabilityFactor * (_temperature + 273) / (15 + 273) * 1013.25 / _barometricPressure;
|
||||
_stabilityFactor = _stabilityFactor * KELVIN(_temperature) / KELVIN(15) * 1013.25 / _barometricPressure;
|
||||
|
||||
_stabilityFactor
|
||||
|
@ -1,78 +0,0 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the true wind speed at a given world position
|
||||
*
|
||||
* Arguments:
|
||||
* 0: _this - world position <posASL>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: wind speed - m/s <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_windSpeed", "_windDir", "_height", "_newWindSpeed", "_windSource", "_roughnessLength"];
|
||||
|
||||
fnc_polar2vect = {
|
||||
private ["_mag2D"];
|
||||
_mag2D = (_this select 0) * cos((_this select 2));
|
||||
[_mag2D * sin((_this select 1)), _mag2D * cos((_this select 1)), (_this select 0) * sin((_this select 2))];
|
||||
};
|
||||
|
||||
_windSpeed = vectorMagnitude ACE_wind;
|
||||
_windDir = (ACE_wind select 0) atan2 (ACE_wind select 1);
|
||||
|
||||
// Wind gradient
|
||||
if (_windSpeed > 0.05) then {
|
||||
_height = (ASLToATL _this) select 2;
|
||||
_height = 0 max _height min 20;
|
||||
if (_height < 20) then {
|
||||
_roughnessLength = _this call FUNC(calculateRoughnessLength);
|
||||
_windSpeed = _windSpeed * ln(_height / _roughnessLength) / ln(20 / _roughnessLength);
|
||||
};
|
||||
};
|
||||
|
||||
// Terrain effect on wind
|
||||
if (_windSpeed > 0.05) then {
|
||||
_newWindSpeed = 0;
|
||||
{
|
||||
_windSource = [100, _windDir + 180, _x] call fnc_polar2vect;
|
||||
if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 9) * _windSpeed;
|
||||
};
|
||||
_windSource = [100, _windDir + 180 + _x, 0] call fnc_polar2vect;
|
||||
if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 9) * _windSpeed;
|
||||
};
|
||||
_windSource = [100, _windDir + 180 - _x, 0] call fnc_polar2vect;
|
||||
if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 9) * _windSpeed;
|
||||
};
|
||||
} forEach [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
||||
_windSpeed = _newWindSpeed;
|
||||
};
|
||||
|
||||
// Obstacle effect on wind
|
||||
if (_windSpeed > 0.05) then {
|
||||
_newWindSpeed = 0;
|
||||
{
|
||||
_windSource = [20, _windDir + 180, _x] call fnc_polar2vect;
|
||||
if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 2) * _windSpeed;
|
||||
};
|
||||
_windSource = [20, _windDir + 180 + _x, 0] call fnc_polar2vect;
|
||||
if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 2) * _windSpeed;
|
||||
};
|
||||
_windSource = [20, _windDir + 180 - _x, 0] call fnc_polar2vect;
|
||||
if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 2) * _windSpeed;
|
||||
};
|
||||
} forEach [0, 5, 10, 15, 20, 25, 30, 35, 40, 45];
|
||||
_windSpeed = _newWindSpeed;
|
||||
};
|
||||
_windSpeed = 0 max _windSpeed;
|
||||
|
||||
_windSpeed
|
@ -19,7 +19,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef", "_ballisticCoefficients", "_velocityBoundaries"];
|
||||
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_AmmoCacheEntry", "_WeaponCacheEntry", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_bulletMass", "_bulletLength", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_stabilityFactor"];
|
||||
_unit = _this select 0;
|
||||
_weapon = _this select 1;
|
||||
_mode = _this select 3;
|
||||
@ -40,7 +40,7 @@ if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then {
|
||||
// The shooter is non local
|
||||
if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then {
|
||||
_opticsName = (primaryWeaponItems _unit) select 2;
|
||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_opticType = getNumber(configFile >> "CfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_abort = _opticType != 2; // We only abort if the non local shooter is not a sniper
|
||||
};
|
||||
} else {
|
||||
@ -48,19 +48,26 @@ if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then {
|
||||
};
|
||||
};
|
||||
//if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // We currently do not have firedEHs on vehicles
|
||||
if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; };
|
||||
if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "CfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; };
|
||||
|
||||
if (_abort || !(GVAR(extensionAvailable))) exitWith {
|
||||
[_bullet, getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH);
|
||||
[_bullet, getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH);
|
||||
};
|
||||
|
||||
_airFriction = getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction");
|
||||
_AmmoCacheEntry = uiNamespace getVariable format[QGVAR(%1), _ammo];
|
||||
if (isNil {_AmmoCacheEntry}) then {
|
||||
_AmmoCacheEntry = _ammo call FUNC(readAmmoDataFromConfig);
|
||||
};
|
||||
_WeaponCacheEntry = uiNamespace getVariable format[QGVAR(%1), _weapon];
|
||||
if (isNil {_WeaponCacheEntry}) then {
|
||||
_WeaponCacheEntry = _weapon call FUNC(readWeaponDataFromConfig);
|
||||
};
|
||||
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_muzzleVelocity = vectorMagnitude _bulletVelocity;
|
||||
|
||||
if (GVAR(barrelLengthInfluenceEnabled)) then {
|
||||
_muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift);
|
||||
_muzzleVelocityShift = [_WeaponCacheEntry select 2, _AmmoCacheEntry select 10, _AmmoCacheEntry select 11, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift);
|
||||
if (_muzzleVelocityShift != 0) then {
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
@ -70,7 +77,7 @@ if (GVAR(barrelLengthInfluenceEnabled)) then {
|
||||
|
||||
if (GVAR(ammoTemperatureEnabled)) then {
|
||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
||||
_muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
|
||||
_muzzleVelocityShift = [_AmmoCacheEntry select 9, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
|
||||
if (_muzzleVelocityShift != 0) then {
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
@ -85,16 +92,16 @@ if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER") then {
|
||||
} else {
|
||||
if (currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
||||
_opticsName = (primaryWeaponItems ACE_player) select 2;
|
||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_opticType = getNumber(configFile >> "CfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_bulletTraceVisible = _opticType == 2;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
_caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber");
|
||||
_bulletLength = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_bulletLength");
|
||||
_bulletMass = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_bulletMass");
|
||||
_barrelTwist = getNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_barrelTwist");
|
||||
_caliber = _AmmoCacheEntry select 1;
|
||||
_bulletLength = _AmmoCacheEntry select 2;
|
||||
_bulletMass = _AmmoCacheEntry select 3;
|
||||
_barrelTwist = _WeaponCacheEntry select 0;
|
||||
_stabilityFactor = 1.5;
|
||||
|
||||
if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||
@ -103,42 +110,9 @@ if (_caliber > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) th
|
||||
_stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor);
|
||||
};
|
||||
|
||||
_twistDirection = 1;
|
||||
if (isNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_twistDirection")) then {
|
||||
_twistDirection = getNumber(configFile >> "cfgWeapons" >> _weapon >> "ACE_twistDirection");
|
||||
if (_twistDirection != -1 && _twistDirection != 0 && _twistDirection != 1) then {
|
||||
_twistDirection = 1;
|
||||
};
|
||||
};
|
||||
|
||||
_transonicStabilityCoef = 0.5;
|
||||
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef")) then {
|
||||
_transonicStabilityCoef = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef");
|
||||
};
|
||||
|
||||
_dragModel = 1;
|
||||
_ballisticCoefficients = [];
|
||||
_velocityBoundaries = [];
|
||||
_atmosphereModel = "ICAO";
|
||||
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then {
|
||||
_dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel");
|
||||
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
||||
_dragModel = 1;
|
||||
};
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then {
|
||||
_ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients");
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then {
|
||||
_velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries");
|
||||
};
|
||||
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
||||
_atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
||||
};
|
||||
|
||||
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _AmmoCacheEntry select 0, _AmmoCacheEntry select 6, _AmmoCacheEntry select 7, _AmmoCacheEntry select 8, _AmmoCacheEntry select 5, _stabilityFactor, _WeaponCacheEntry select 1, _muzzleVelocity, _AmmoCacheEntry select 4, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||
|
||||
[{
|
||||
private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||
@ -158,7 +132,7 @@ GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||
};
|
||||
|
||||
if (_bulletTraceVisible && _bulletSpeed > 600) then {
|
||||
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
||||
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.0157480315*_caliber,0.00787401574*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
||||
};
|
||||
|
||||
call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]);
|
||||
|
@ -22,7 +22,7 @@ _initStartTime = time;
|
||||
_mapSize = getNumber (configFile >> "CfgWorlds" >> worldName >> "MapSize");
|
||||
|
||||
if (("ace_advanced_ballistics" callExtension format["init:%1:%2", worldName, _mapSize]) == "Terrain already initialized") exitWith {
|
||||
if (GVAR(INIT_MESSAGE_ENABLED)) then {
|
||||
if (GVAR(initMessageEnabled)) then {
|
||||
systemChat "AdvancedBallistics: Terrain already initialized";
|
||||
};
|
||||
};
|
||||
@ -40,7 +40,7 @@ GVAR(currentGrid) = 0;
|
||||
_initStartTime = _args select 2;
|
||||
|
||||
if (GVAR(currentGrid) >= _gridCells) exitWith {
|
||||
if (GVAR(INIT_MESSAGE_ENABLED)) then {
|
||||
if (GVAR(initMessageEnabled)) then {
|
||||
systemChat format["AdvancedBallistics: Finished terrain initialization in %1 seconds", ceil(time - _initStartTime)];
|
||||
};
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
|
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Reads the ammo class config and updates the config cache
|
||||
*
|
||||
* Arguments:
|
||||
* 0: ammo - classname <string>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: [_airFriction, _caliber, _bulletLength, _bulletMass, _transonicStabilityCoef, _dragModel, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _ammoTempMuzzleVelocityShifts, _muzzleVelocityTable, _barrelLengthTable] <ARRAY>
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ammo", "_airFriction", "_caliber", "_bulletLength", "_bulletMass", "_transonicStabilityCoef", "_dragModel", "_ballisticCoefficients", "_velocityBoundaries", "_atmosphereModel", "_ammoTempMuzzleVelocityShifts", "_muzzleVelocityTable", "_barrelLengthTable", "_result"];
|
||||
_ammo = _this;
|
||||
|
||||
_airFriction = getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction");
|
||||
_caliber = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_caliber");
|
||||
_bulletLength = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_bulletLength");
|
||||
_bulletMass = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_bulletMass");
|
||||
_transonicStabilityCoef = 0.5;
|
||||
if (isNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef")) then {
|
||||
_transonicStabilityCoef = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_transonicStabilityCoef");
|
||||
};
|
||||
_dragModel = 1;
|
||||
_ballisticCoefficients = [];
|
||||
_velocityBoundaries = [];
|
||||
_atmosphereModel = "ICAO";
|
||||
if (isNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_dragModel")) then {
|
||||
_dragModel = getNumber(configFile >> "CfgAmmo" >> _ammo >> "ACE_dragModel");
|
||||
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
||||
_dragModel = 1;
|
||||
};
|
||||
};
|
||||
if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then {
|
||||
_ballisticCoefficients = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_ballisticCoefficients");
|
||||
};
|
||||
if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then {
|
||||
_velocityBoundaries = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_velocityBoundaries");
|
||||
};
|
||||
if (isText(configFile >> "CfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
||||
_atmosphereModel = getText(configFile >> "CfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
||||
};
|
||||
_ammoTempMuzzleVelocityShifts = [];
|
||||
if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_ammoTempMuzzleVelocityShifts")) then {
|
||||
_ammoTempMuzzleVelocityShifts = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_ammoTempMuzzleVelocityShifts");
|
||||
};
|
||||
_muzzleVelocityTable = [];
|
||||
_barrelLengthTable = [];
|
||||
if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_muzzleVelocities")) then {
|
||||
_muzzleVelocityTable = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_muzzleVelocities");
|
||||
};
|
||||
if (isArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_barrelLengths")) then {
|
||||
_barrelLengthTable = getArray(configFile >> "CfgAmmo" >> _ammo >> "ACE_barrelLengths");
|
||||
};
|
||||
|
||||
_result = [_airFriction, _caliber, _bulletLength, _bulletMass, _transonicStabilityCoef, _dragModel, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _ammoTempMuzzleVelocityShifts, _muzzleVelocityTable, _barrelLengthTable];
|
||||
|
||||
uiNamespace setVariable [format[QGVAR(%1), _ammo], _result];
|
||||
|
||||
_result
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Reads the weapon class config and updates the config cache
|
||||
*
|
||||
* Arguments:
|
||||
* 0: ammo - classname <string>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: [_barrelTwist, _twistDirection, _barrelLength] <ARRAY>
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_weapon", "_barrelTwist", "_twistDirection", "_barrelLength", "_result"];
|
||||
_weapon = _this;
|
||||
|
||||
_barrelTwist = getNumber(configFile >> "CfgWeapons" >> _weapon >> "ACE_barrelTwist");
|
||||
_twistDirection = 1;
|
||||
if (isNumber(configFile >> "CfgWeapons" >> _weapon >> "ACE_twistDirection")) then {
|
||||
_twistDirection = getNumber(configFile >> "CfgWeapons" >> _weapon >> "ACE_twistDirection");
|
||||
if (_twistDirection != -1 && _twistDirection != 0 && _twistDirection != 1) then {
|
||||
_twistDirection = 1;
|
||||
};
|
||||
};
|
||||
_barrelLength = getNumber(configFile >> "CfgWeapons" >> _weapon >> "ACE_barrelLength");
|
||||
|
||||
_result = [_barrelTwist, _twistDirection, _barrelLength];
|
||||
|
||||
uiNamespace setVariable [format[QGVAR(%1), _weapon], _result];
|
||||
|
||||
_result
|
@ -25,5 +25,85 @@
|
||||
<Czech>Zobrazit úhloměr</Czech>
|
||||
<Portuguese>Mostrar Transferidor</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_DisplayName">
|
||||
<English>Advanced Ballistics</English>
|
||||
<Polish>Zaawansowana balistyka</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_enabled_DisplayName">
|
||||
<English>Advanced Ballistics</English>
|
||||
<Polish>Zaawansowana balistyka</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_enabled_Description">
|
||||
<English>Enables advanced ballistics</English>
|
||||
<Polish>Aktywuje zaawansowaną balistykę</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_DisplayName">
|
||||
<English>Always Enabled For Snipers</English>
|
||||
<Polish>Zawsze akt. dla snajp.</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_alwaysSimulateForSnipers_Description">
|
||||
<English>Always enables advanced ballistics when high power optics are used</English>
|
||||
<Polish>Aktywuje zaawansowaną balistykę zawsze, kiedy używana jest optyka</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_disabledInFullAutoMod_DisplayName">
|
||||
<English>Disabled In FullAuto Mode</English>
|
||||
<Polish>Wył. podczas ognia auto.</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_disabledInFullAutoMod_Description">
|
||||
<English>Disables the advanced ballistics during full auto fire</English>
|
||||
<Polish>Dezaktywuje zaawansowaną balistykę podczas ognia automatycznego</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_DisplayName">
|
||||
<English>Disabled For Non Local Players</English>
|
||||
<Polish>Wyłącz dla nielok. graczy</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_onlyActiveForLocalPlayers_Description">
|
||||
<English>Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer)</English>
|
||||
<Polish>Dezaktywuje zaawansowaną balistykę dla pocisków pochodzących od innych graczy(aktywuj tą opcję jeżeli odczuwasz spadki FPS podczas sporych strzelanin w MP)</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_DisplayName">
|
||||
<English>Enable Ammo Temperature Simulation</English>
|
||||
<Polish>Symulacja temp. amunicji</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_ammoTemperatureEnabled_Description">
|
||||
<English>Muzzle velocity varies with ammo temperature</English>
|
||||
<Polish>Prędkość wylotowa pocisku jest zależna od temperatury amunicji</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_DisplayName">
|
||||
<English>Enable Barrel Length Simulation</English>
|
||||
<Polish>Symulacja długości lufy</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_barrelLengthInfluenceEnabled_Description">
|
||||
<English>Muzzle velocity varies with barrel length</English>
|
||||
<Polish>Prędkość wylotowa pocisku jest zależna od długości lufy</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_bulletTraceEnabled_DisplayName">
|
||||
<English>Enable Bullet Trace Effect</English>
|
||||
<Polish>Efekt smugi pocisku</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_bulletTraceEnabled_Description">
|
||||
<English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English>
|
||||
<Polish>Aktywuje efekt smugi pocisku dla pocisków wysokokalibrowych (widoczne tylko podczas patrzenia przez optykę)</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulationInterval_DisplayName">
|
||||
<English>Simulation Interval</English>
|
||||
<Polish>Interwał symulacji</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulationInterval_Description">
|
||||
<English>Defines the interval between every calculation step</English>
|
||||
<Polish>Określa interwał pomiędzy każdym krokiem kalkulacji</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulationRadius_DisplayName">
|
||||
<English>Simulation Radius</English>
|
||||
<Polish>Zasięg symulacji</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_simulationRadius_Description">
|
||||
<English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English>
|
||||
<Polish>Określa obszar naokoło gracza (w metrach), na którym zaawansowana balistyka jest aplikowana dla pocisków</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AdvancedBallistics_Description">
|
||||
<English></English>
|
||||
<Polish>Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki.</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -21,7 +21,8 @@ class CfgAISkill {
|
||||
courage[] = {0,0, 1,0.7}; // {0,0,1,1};
|
||||
endurance[] = {0,0, 1,0.7}; // {0,0,1,1};
|
||||
general[] = {0,0, 1,0.9}; // {0,0,1,1};
|
||||
reloadSpeed[] = {0,0, 1,0.8}; // {0,0,1,1};
|
||||
// apparently breaks rapid firing in single fire mode for players
|
||||
//reloadSpeed[] = {0,0, 1,0.8}; // {0,0,1,1};
|
||||
spotDistance[] = {0,0, 1,0.9}; // {0,0.2,1,0.4};
|
||||
spotTime[] = {0,0, 1,0.7}; // {0,0,1,0.7};
|
||||
};
|
||||
|
@ -891,9 +891,12 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
|
||||
|
||||
class OpticsIn
|
||||
{
|
||||
class WideUnstabalized
|
||||
{
|
||||
opticsDisplayName = "WU";
|
||||
delete Narrow;
|
||||
delete Medium;
|
||||
delete Wide;
|
||||
|
||||
class ACE_WideUnstabilized {
|
||||
opticsDisplayName = "W NS";
|
||||
initAngleX = 0;
|
||||
minAngleX = -35;
|
||||
maxAngleX = 10;
|
||||
@ -910,8 +913,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
|
||||
horizontallyStabilized = 1;
|
||||
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F";
|
||||
};
|
||||
class Wide
|
||||
{
|
||||
class ACE_Wide: ACE_WideUnstabilized {
|
||||
opticsDisplayName = "W";
|
||||
initAngleX = 0;
|
||||
minAngleX = -35;
|
||||
@ -929,8 +931,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
|
||||
horizontallyStabilized = 1;
|
||||
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F";
|
||||
};
|
||||
class Medium: Wide
|
||||
{
|
||||
class ACE_Medium: ACE_Wide {
|
||||
opticsDisplayName = "M";
|
||||
initFov = 0.093;
|
||||
minFov = 0.093;
|
||||
@ -940,8 +941,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
|
||||
horizontallyStabilized = 1;
|
||||
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F";
|
||||
};
|
||||
class Narrow: Wide
|
||||
{
|
||||
class ACE_Narrow: ACE_Wide {
|
||||
opticsDisplayName = "N";
|
||||
initFov = 0.029;
|
||||
minFov = 0.029;
|
||||
@ -952,8 +952,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
|
||||
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F";
|
||||
|
||||
};
|
||||
class Narrower: Wide
|
||||
{
|
||||
class ACE_Narrower: ACE_Wide {
|
||||
opticsDisplayName = "Z";
|
||||
initFov = 0.01;
|
||||
minFov = 0.01;
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Aircraft">
|
||||
<Key ID="STR_ACE_Aircraft_CMFlareLauncher_Burst_Name">
|
||||
@ -34,7 +34,7 @@
|
||||
<Czech>Otevřít nákladní prostor</Czech>
|
||||
<Hungarian>Rakodórámpa nyitása</Hungarian>
|
||||
<Russian>Открыть грузовой отсек</Russian>
|
||||
<Italian>Apri la porta del cargo</Italian>
|
||||
<Italian>Apri la rampa di carico</Italian>
|
||||
<Portuguese>Abrir porta de carga</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Aircraft_CloseCargoRamp">
|
||||
@ -46,7 +46,7 @@
|
||||
<Czech>Zavřít nákladní prostor</Czech>
|
||||
<Hungarian>Rakodórámpa zárása</Hungarian>
|
||||
<Russian>Закрыть грузовой отсек</Russian>
|
||||
<Italian>Chiudi la porta del cargo</Italian>
|
||||
<Italian>Chiudi la rampa di carico</Italian>
|
||||
<Portuguese>Fechar porta de carga</Portuguese>
|
||||
</Key>
|
||||
</Package>
|
||||
|
1
addons/atragmx/$PBOPREFIX$
Normal file
1
addons/atragmx/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\atragmx
|
@ -142,6 +142,7 @@ class ATragMX_Display {
|
||||
name="ATragMX_Display";
|
||||
idd=-1;
|
||||
onLoad="uiNamespace setVariable ['ATragMX_Display', (_this select 0)]";
|
||||
onUnload=QUOTE(_this call FUNC(on_close_dialog));
|
||||
movingEnable=1;
|
||||
controlsBackground[]={};
|
||||
objects[]={};
|
||||
|
@ -19,7 +19,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
|
||||
|
||||
[".338LM 250gr" , 880, 100, 0.0598, -0.0006060, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"],
|
||||
[".338LM 300gr" , 800, 100, 0.0677, -0.0005350, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"],
|
||||
[".338LM API526" , 880, 100, 0.0601, -0.0006730, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.290, 7, "ICAO"],
|
||||
[".338LM API526" , 895, 100, 0.0601, -0.0006730, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.560, 1, "ASM" ],
|
||||
|
||||
[".300WM Mk248 Mod 0", 900, 100, 0.0584, -0.0008300, 3.81, 0, 2, 10, 120, 0, 0, 13.31, 7.80, 25.40, 0.268, 7, "ICAO"],
|
||||
[".300WM Mk248 Mod 1", 867, 100, 0.0611, -0.0008150, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"],
|
||||
@ -28,8 +28,9 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
|
||||
["7.62x54mmR" , 800, 100, 0.0692, -0.0010230, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"],
|
||||
|
||||
["7.62x51mm M80" , 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.200, 7, "ICAO"],
|
||||
["7.62x51mm M118LR" , 820, 100, 0.0662, -0.0008525, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"],
|
||||
["7.62x51mm Mk319" , 820, 100, 0.0670, -0.0010300, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"],
|
||||
["7.62x51mm M118LR" , 780, 100, 0.0710, -0.0008525, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"],
|
||||
["7.62x51mm Mk319" , 910, 100, 0.0585, -0.0010300, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"],
|
||||
["7.62x51mm M993" , 930, 100, 0.0585, -0.0010300, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO"],
|
||||
["7.62x51mm Subsonic", 320, 100, 0.3060, -0.0004910, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"],
|
||||
|
||||
["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"],
|
||||
@ -38,7 +39,8 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
|
||||
|
||||
["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ],
|
||||
["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ],
|
||||
["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ]];
|
||||
["5.56x45mm Mk318" , 880, 100, 0.0616, -0.0011200, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ],
|
||||
["5.56x45mm M995" , 869, 100, 0.0616, -0.0011200, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" ]];
|
||||
|
||||
[] call FUNC(clear_user_data);
|
||||
profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];
|
||||
|
@ -68,5 +68,6 @@ PREP(update_target_data);
|
||||
PREP(update_target_selection);
|
||||
PREP(update_unit_selection);
|
||||
PREP(update_zero_range);
|
||||
PREP(on_close_dialog);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -52,11 +52,11 @@ if (!GVAR(atmosphereModeTBH)) then {
|
||||
};
|
||||
|
||||
private ["_bulletLength", "_stabilityFactor"];
|
||||
_bulletLength = 1.8;
|
||||
_bulletLength = 45.72;
|
||||
_stabilityFactor = 1.5;
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||
_stabilityFactor = [_bulletDiameter, _bulletLength, _bulletMass, _barrelTwist * 10, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -52,11 +52,11 @@ if (!GVAR(atmosphereModeTBH)) then {
|
||||
};
|
||||
|
||||
private ["_bulletLength", "_stabilityFactor"];
|
||||
_bulletLength = 1.8;
|
||||
_bulletLength = 45.72;
|
||||
_stabilityFactor = 1.5;
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||
_stabilityFactor = [_bulletDiameter, _bulletLength, _bulletMass, _barrelTwist * 10, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
//if (dialog) exitWith { false };
|
||||
if (GVAR(active)) exitWith { false };
|
||||
if (underwater ACE_player) exitWith { false };
|
||||
if (!("ACE_ATragMX" in (uniformItems ACE_player)) && !("ACE_ATragMX" in (vestItems ACE_player))) exitWith { false };
|
||||
|
||||
@ -47,4 +47,6 @@ GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer);
|
||||
lbAdd [6000, _x select 0];
|
||||
} forEach GVAR(gunList);
|
||||
|
||||
GVAR(active) = true;
|
||||
|
||||
true
|
||||
|
@ -15,6 +15,8 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
GVAR(active) = false;
|
||||
|
||||
GVAR(workingMemory) = +(GVAR(gunList) select 0);
|
||||
|
||||
GVAR(scopeUnits) = ["MILs", "TMOA", "SMOA", "Clicks"];
|
||||
|
4
addons/atragmx/functions/fnc_on_close_dialog.sqf
Normal file
4
addons/atragmx/functions/fnc_on_close_dialog.sqf
Normal file
@ -0,0 +1,4 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
uiNamespace setVariable ['ATragMX_Display', nil];
|
||||
GVAR(active) = false;
|
@ -95,36 +95,6 @@ if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) t
|
||||
GVAR(workingMemory) set [1, _muzzleVelocity];
|
||||
GVAR(workingMemory) set [2, _zeroRange];
|
||||
|
||||
private ["_elevationCur", "_windageCur", "_clickSize", "_clickNumber", "_clickInterval"];
|
||||
_elevationCur = GVAR(workingMemory) select 10;
|
||||
_windageCur = GVAR(workingMemory) select 11;
|
||||
|
||||
switch (GVAR(currentScopeUnit)) do {
|
||||
case 0: {
|
||||
_elevationCur = _elevationCur * 3.38;
|
||||
_windageCur = _windageCur * 3.38;
|
||||
};
|
||||
case 2: {
|
||||
_elevationCur = _elevationCur / 1.047;
|
||||
_windageCur = _windageCur / 1.047;
|
||||
};
|
||||
case 3: {
|
||||
switch (GVAR(workingMemory) select 7) do {
|
||||
case 0: { _clickSize = 1; };
|
||||
case 1: { _clickSize = 1 / 1.047; };
|
||||
case 2: { _clickSize = 3.38; };
|
||||
};
|
||||
_clickNumber = GVAR(workingMemory) select 8;
|
||||
_clickInterval = _clickSize / _clickNumber;
|
||||
|
||||
_elevationCur = Round(_elevationCur / _clickInterval);
|
||||
_windageCur = Round(_windageCur / _clickInterval);
|
||||
};
|
||||
};
|
||||
|
||||
GVAR(workingMemory) set [10, _elevationCur];
|
||||
GVAR(workingMemory) set [11, _windageCur];
|
||||
|
||||
[] call FUNC(update_gun);
|
||||
[] call FUNC(update_gun_ammo_data);
|
||||
[] call FUNC(update_atmosphere);
|
||||
|
@ -2,7 +2,7 @@
|
||||
{
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
|
||||
if (GVAR(active)) exitWith {false};
|
||||
// Statement
|
||||
[] call FUNC(create_dialog);
|
||||
false
|
||||
|
@ -11,4 +11,4 @@
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
|
||||
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.3
|
||||
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.5
|
||||
|
@ -179,7 +179,7 @@
|
||||
<Portuguese>Erro ao fixar</Portuguese>
|
||||
<Polish>Przyczepianie nie powiodło się</Polish>
|
||||
<Hungarian>Hozzácsatolás sikertelen</Hungarian>
|
||||
<Italian>Impossibile Attaccare</Italian>
|
||||
<Italian>Non si attacca</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_Item_Attached">
|
||||
<English>%1<br/>Attached</English>
|
||||
|
@ -25,16 +25,16 @@ class CfgAmmo {
|
||||
typicalSpeed=750;
|
||||
tracerStartTime = 0.073; //M856 tracer burns out to 800m
|
||||
tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=62;
|
||||
ACE_caliber=5.69;
|
||||
ACE_bulletLength=23.012;
|
||||
ACE_bulletMass=4.0176;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75};
|
||||
ACE_ballisticCoefficients[]={0.151};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900};
|
||||
ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0};
|
||||
ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6};
|
||||
};
|
||||
class ACE_556x45_Ball_Mk262 : B_556x45_Ball {
|
||||
airFriction=-0.001125;
|
||||
@ -42,16 +42,16 @@ class CfgAmmo {
|
||||
deflecting=18;
|
||||
hit=11;
|
||||
typicalSpeed=836;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=77;
|
||||
ACE_caliber=5.69;
|
||||
ACE_bulletLength=23.012;
|
||||
ACE_bulletMass=4.9896;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.361};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={624, 816, 832, 838};
|
||||
ACE_barrelLengths[]={7.5, 14.5, 18, 20};
|
||||
ACE_barrelLengths[]={190.5, 368.3, 457.2, 508.0};
|
||||
};
|
||||
class ACE_556x45_Ball_Mk318 : B_556x45_Ball {
|
||||
airFriction=-0.001120;
|
||||
@ -59,33 +59,33 @@ class CfgAmmo {
|
||||
deflecting=18;
|
||||
hit=9;
|
||||
typicalSpeed=886;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=62;
|
||||
ACE_caliber=5.69;
|
||||
ACE_bulletLength=23.012;
|
||||
ACE_bulletMass=4.0176;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.307};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={780, 886, 950};
|
||||
ACE_barrelLengths[]={10, 15.5, 20};
|
||||
ACE_barrelLengths[]={254.0, 393.7, 508.0};
|
||||
};
|
||||
class ACE_556x45_Ball_M995_AP : B_556x45_Ball {
|
||||
airFriction=-0.001120;
|
||||
caliber=1.6;
|
||||
deflecting=18;
|
||||
hit=6;
|
||||
typicalSpeed=886;
|
||||
ACE_caliber=0.224;
|
||||
ACE_bulletLength=0.906;
|
||||
ACE_bulletMass=46;
|
||||
typicalSpeed=869;
|
||||
ACE_caliber=5.69;
|
||||
ACE_bulletLength=23.012;
|
||||
ACE_bulletMass=4.5359237;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.151};
|
||||
ACE_ballisticCoefficients[]={0.310};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={950, 1030, 1040};
|
||||
ACE_barrelLengths[]={10, 15.5, 20};
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={820, 865, 880};
|
||||
ACE_barrelLengths[]={254.0, 393.7, 508.0};
|
||||
};
|
||||
class B_556x45_Ball_Tracer_Red;
|
||||
class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red {
|
||||
@ -97,16 +97,16 @@ class CfgAmmo {
|
||||
deflecting=18;
|
||||
hit=7;
|
||||
typicalSpeed=880;
|
||||
ACE_caliber=0.220;
|
||||
ACE_bulletLength=0.85;
|
||||
ACE_bulletMass=52.9;
|
||||
ACE_caliber=5.588;
|
||||
ACE_bulletLength=21.59;
|
||||
ACE_bulletMass=3.42792;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.168};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={780, 880, 920};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
ACE_barrelLengths[]={254.0, 414.02, 508.0};
|
||||
};
|
||||
class B_556x45_Ball_Tracer_Green;
|
||||
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green {
|
||||
@ -117,30 +117,30 @@ class CfgAmmo {
|
||||
typicalSpeed=883;
|
||||
tracerStartTime = 0.073; //7T3M tracer burns out to 850m
|
||||
tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=0.220;
|
||||
ACE_bulletLength=0.85;
|
||||
ACE_bulletMass=49.8;
|
||||
ACE_caliber=5.588;
|
||||
ACE_bulletLength=21.59;
|
||||
ACE_bulletMass=3.22704;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.168};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={785, 883, 925};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
ACE_barrelLengths[]={254.0, 414.02, 508.0};
|
||||
};
|
||||
class B_65x39_Caseless : BulletBase {
|
||||
airFriction=-0.000785;
|
||||
typicalSpeed=800;
|
||||
ACE_caliber=0.264;
|
||||
ACE_bulletLength=1.295;
|
||||
ACE_bulletMass=123;
|
||||
ACE_caliber=6.706;
|
||||
ACE_bulletLength=32.893;
|
||||
ACE_bulletMass=7.9704;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.263};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={730, 760, 788, 800, 810, 830};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26, 30};
|
||||
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4, 762.0};
|
||||
};
|
||||
class B_65x39_Case_yellow;
|
||||
class ACE_65x39_Caseless_Tracer_Dim : B_65x39_Case_yellow {
|
||||
@ -154,31 +154,31 @@ class CfgAmmo {
|
||||
airFriction=-0.00078;
|
||||
typicalSpeed=820 ;
|
||||
caliber=0.9;
|
||||
ACE_caliber=0.264;
|
||||
ACE_bulletLength=1.364;
|
||||
ACE_bulletMass=139;
|
||||
ACE_caliber=6.706;
|
||||
ACE_bulletLength=34.646;
|
||||
ACE_bulletMass=9.0072;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.290};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={730, 760, 790, 820, 830};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_65_Creedmor_Ball: B_65x39_Caseless {
|
||||
airFriction=-0.000651;
|
||||
typicalSpeed=860 ;
|
||||
caliber=1.1;
|
||||
ACE_caliber=0.264;
|
||||
ACE_bulletLength=1.426;
|
||||
ACE_bulletMass=140;
|
||||
ACE_caliber=6.706;
|
||||
ACE_bulletLength=36.22;
|
||||
ACE_bulletMass=9.072;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.317};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={750, 820, 840, 852, 860};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class B_762x51_Ball : BulletBase {
|
||||
airFriction=-0.001035;
|
||||
@ -186,16 +186,16 @@ class CfgAmmo {
|
||||
hit=9;
|
||||
tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m
|
||||
tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=146;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=28.956;
|
||||
ACE_bulletMass=9.4608;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.2};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={700, 800, 820, 833, 845};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class B_762x51_Tracer_Yellow;
|
||||
class ACE_B_762x51_Tracer_Dim: B_762x51_Tracer_Yellow {
|
||||
@ -206,206 +206,206 @@ class CfgAmmo {
|
||||
caliber=1.8;
|
||||
hit=16;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.24;
|
||||
ACE_bulletMass=175;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=31.496;
|
||||
ACE_bulletMass=11.34;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.243};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={750, 780, 790, 794};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_762x51_Ball_Mk316_Mod_0 : B_762x51_Ball {
|
||||
airFriction=-0.0008525;
|
||||
caliber=1.8;
|
||||
hit=16;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.24;
|
||||
ACE_bulletMass=175;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=31.496;
|
||||
ACE_bulletMass=11.34;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||
ACE_ballisticCoefficients[]={0.243};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={775, 790, 805, 810};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball {
|
||||
airFriction=-0.00103;
|
||||
caliber=1.5;
|
||||
hit=14;
|
||||
typicalSpeed=900;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.24;
|
||||
ACE_bulletMass=130;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=31.496;
|
||||
ACE_bulletMass=8.424;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.377};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={838, 892, 910};
|
||||
ACE_barrelLengths[]={13, 16, 20};
|
||||
ACE_barrelLengths[]={330.2, 406.4, 508.0};
|
||||
};
|
||||
class ACE_762x51_Ball_M993_AP : B_762x51_Ball {
|
||||
airFriction=-0.00103;
|
||||
caliber=2.2;
|
||||
hit=11;
|
||||
typicalSpeed=930;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.24;
|
||||
ACE_bulletMass=127;
|
||||
typicalSpeed=910;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=31.496;
|
||||
ACE_bulletMass=8.22946157;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.377};
|
||||
ACE_ballisticCoefficients[]={0.359};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={875, 910, 930};
|
||||
ACE_barrelLengths[]={13, 16, 20};
|
||||
ACE_barrelLengths[]={330.2, 406.4, 508.0};
|
||||
};
|
||||
class ACE_762x51_Ball_Subsonic : B_762x51_Ball {
|
||||
airFriction=-0.000535;
|
||||
caliber=1;
|
||||
hit=6;
|
||||
typicalSpeed=320;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.340;
|
||||
ACE_bulletMass=200;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=34.036;
|
||||
ACE_bulletMass=12.96;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.235};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={305, 325, 335, 340};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_30_06_M1_Ball : B_762x51_Ball {
|
||||
airFriction=-0.0009;
|
||||
typicalSpeed=800;
|
||||
caliber=2.0;
|
||||
hit=10;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.21;
|
||||
ACE_bulletMass=174;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=30.734;
|
||||
ACE_bulletMass=11.2752;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.494};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={700, 785, 800, 830, 840};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_7_Remington_Magnum_Ball : B_762x51_Ball {
|
||||
airFriction=-0.0008;
|
||||
typicalSpeed=820;
|
||||
caliber=2.1;
|
||||
hit=8;
|
||||
ACE_caliber=0.284;
|
||||
ACE_bulletLength=1.529;
|
||||
ACE_bulletMass=180;
|
||||
ACE_caliber=7.214;
|
||||
ACE_bulletLength=38.837;
|
||||
ACE_bulletMass=11.664;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.345};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={720, 780, 812, 822, 830};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_243_Winchester_Ball : B_762x51_Ball {
|
||||
airFriction=-0.00095;
|
||||
typicalSpeed=915;
|
||||
caliber=2.3;
|
||||
hit=6;
|
||||
ACE_caliber=0.243;
|
||||
ACE_bulletLength=1.282;
|
||||
ACE_bulletMass=180;
|
||||
ACE_caliber=6.172;
|
||||
ACE_bulletLength=32.563;
|
||||
ACE_bulletMass=11.664;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.278};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={830, 875, 900, 915, 920};
|
||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball {
|
||||
airFriction=-0.000830;
|
||||
caliber=1.8;
|
||||
hit=17;
|
||||
typicalSpeed=900;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.353;
|
||||
ACE_bulletMass=190;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=34.366;
|
||||
ACE_bulletMass=12.312;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||
ACE_ballisticCoefficients[]={0.268};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={865, 900, 924};
|
||||
ACE_barrelLengths[]={20, 24, 26};
|
||||
ACE_barrelLengths[]={508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball {
|
||||
airFriction=-0.000815;
|
||||
caliber=1.9;
|
||||
hit=18;
|
||||
typicalSpeed=867;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.489;
|
||||
ACE_bulletMass=220;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=37.821;
|
||||
ACE_bulletMass=14.256;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||
ACE_ballisticCoefficients[]={0.310};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={847, 867, 877};
|
||||
ACE_barrelLengths[]={20, 24, 26};
|
||||
ACE_barrelLengths[]={508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball {
|
||||
airFriction=-0.00076;
|
||||
caliber=2.0;
|
||||
hit=19;
|
||||
typicalSpeed=853;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.602;
|
||||
ACE_bulletMass=230;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=40.691;
|
||||
ACE_bulletMass=14.904;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.368};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={800, 853, 884};
|
||||
ACE_barrelLengths[]={20, 24, 26};
|
||||
ACE_barrelLengths[]={508.0, 609.6, 660.4};
|
||||
};
|
||||
class B_762x54_Ball: B_762x51_Ball {
|
||||
airFriction=-0.001023;
|
||||
typicalSpeed=820;
|
||||
ACE_caliber=0.312;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=152;
|
||||
ACE_caliber=7.925;
|
||||
ACE_bulletLength=28.956;
|
||||
ACE_bulletMass=9.8496;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.4};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={700, 800, 820, 833};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_762x54_Ball_7N14 : B_762x51_Ball {
|
||||
airFriction=-0.001023;
|
||||
caliber=1.5;
|
||||
hit=15;
|
||||
typicalSpeed=820;
|
||||
ACE_caliber=0.312;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=152;
|
||||
ACE_caliber=7.925;
|
||||
ACE_bulletLength=28.956;
|
||||
ACE_bulletMass=9.8496;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.4};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={700, 800, 820, 833};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class B_762x54_Tracer_Green;
|
||||
class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green {
|
||||
@ -415,48 +415,48 @@ class CfgAmmo {
|
||||
typicalSpeed=800;
|
||||
tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds
|
||||
tracerEndTime = 3;
|
||||
ACE_caliber=0.312;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=149;
|
||||
ACE_caliber=7.925;
|
||||
ACE_bulletLength=28.956;
|
||||
ACE_bulletMass=9.6552;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.395};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={680, 750, 798, 800};
|
||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_762x35_Ball : B_762x51_Ball {
|
||||
airFriction=-0.000821;
|
||||
caliber=1.5;
|
||||
hit=11;
|
||||
typicalSpeed=790;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.153;
|
||||
ACE_bulletMass=125;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=29.286;
|
||||
ACE_bulletMass=8.1;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.349, 0.338, 0.330, 0.310};
|
||||
ACE_velocityBoundaries[]={792, 610, 488};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={620, 655, 675};
|
||||
ACE_barrelLengths[]={9, 16, 20};
|
||||
ACE_barrelLengths[]={228.6, 406.4, 508.0};
|
||||
};
|
||||
class ACE_762x39_Ball : B_762x51_Ball {
|
||||
airFriction=-0.0015168;
|
||||
hit=12;
|
||||
caliber=1.5;
|
||||
typicalSpeed=716;
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=123;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=28.956;
|
||||
ACE_bulletMass=7.9704;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.275};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={650, 716, 750};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
ACE_barrelLengths[]={254.0, 414.02, 508.0};
|
||||
};
|
||||
class ACE_762x39_Ball_57N231P : B_762x54_Tracer_Green {
|
||||
airFriction=-0.0015168;
|
||||
@ -465,128 +465,128 @@ class CfgAmmo {
|
||||
typicalSpeed=716;
|
||||
tracerStartTime = 0.073; //57N231P tracer burns out to 800m
|
||||
tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.14;
|
||||
ACE_bulletMass=117;
|
||||
ACE_caliber=7.823;
|
||||
ACE_bulletLength=28.956;
|
||||
ACE_bulletMass=7.5816;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.275};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={650, 716, 750};
|
||||
ACE_barrelLengths[]={10, 16.3, 20};
|
||||
ACE_barrelLengths[]={254.0, 414.02, 508.0};
|
||||
};
|
||||
class B_9x21_Ball : BulletBase {
|
||||
airFriction=-0.00125;
|
||||
typicalSpeed=390;
|
||||
hit=6;
|
||||
ACE_caliber=0.356;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=115;
|
||||
ACE_caliber=9.042;
|
||||
ACE_bulletLength=15.494;
|
||||
ACE_bulletMass=7.452;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.17};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={440, 460, 480};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
ACE_barrelLengths[]={101.6, 127.0, 228.6};
|
||||
};
|
||||
class ACE_9x18_Ball_57N181S : B_9x21_Ball {
|
||||
hit=5;
|
||||
airFriction=-0.001234;
|
||||
typicalSpeed=298;
|
||||
ACE_caliber=0.365;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=92.6;
|
||||
ACE_caliber=9.271;
|
||||
ACE_bulletLength=15.494;
|
||||
ACE_bulletMass=6.00048;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.125};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={298, 330, 350};
|
||||
ACE_barrelLengths[]={3.8, 5, 9};
|
||||
ACE_barrelLengths[]={96.52, 127.0, 228.6};
|
||||
};
|
||||
class ACE_9x19_Ball : B_9x21_Ball {
|
||||
airFriction=-0.001234;
|
||||
typicalSpeed=370;
|
||||
hit=6;
|
||||
ACE_caliber=0.355;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=124;
|
||||
ACE_caliber=9.017;
|
||||
ACE_bulletLength=15.494;
|
||||
ACE_bulletMass=8.0352;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.165};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={340, 370, 400};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
ACE_barrelLengths[]={101.6, 127.0, 228.6};
|
||||
};
|
||||
class ACE_10x25_Ball : B_9x21_Ball {
|
||||
airFriction=-0.00168;
|
||||
typicalSpeed=425;
|
||||
hit=7;
|
||||
ACE_caliber=0.5;
|
||||
ACE_bulletLength=0.764;
|
||||
ACE_bulletMass=165;
|
||||
ACE_caliber=12.7;
|
||||
ACE_bulletLength=19.406;
|
||||
ACE_bulletMass=10.692;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.189};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={360, 400, 430};
|
||||
ACE_barrelLengths[]={4, 4.61, 9};
|
||||
ACE_barrelLengths[]={101.6, 117.094, 228.6};
|
||||
};
|
||||
class ACE_765x17_Ball: B_9x21_Ball {
|
||||
airFriction=-0.001213;
|
||||
typicalSpeed=282;
|
||||
hit=7;
|
||||
ACE_caliber=0.3125;
|
||||
ACE_bulletLength=0.610;
|
||||
ACE_bulletMass=65;
|
||||
ACE_caliber=7.938;
|
||||
ACE_bulletLength=15.494;
|
||||
ACE_bulletMass=4.212;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.118};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={282, 300, 320};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
ACE_barrelLengths[]={101.6, 127.0, 228.6};
|
||||
};
|
||||
class ACE_303_Ball : ACE_762x51_Ball_M118LR {
|
||||
airFriction=-0.00083;
|
||||
typicalSpeed=761;
|
||||
caliber=2.0;
|
||||
ACE_caliber=0.311;
|
||||
ACE_bulletLength=1.227;
|
||||
ACE_bulletMass=174;
|
||||
ACE_caliber=7.899;
|
||||
ACE_bulletLength=31.166;
|
||||
ACE_bulletMass=11.2752;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.499, 0.493, 0.48};
|
||||
ACE_velocityBoundaries[]={671, 549};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={748, 761, 765};
|
||||
ACE_barrelLengths[]={20, 24, 26};
|
||||
ACE_barrelLengths[]={508.0, 609.6, 660.4};
|
||||
};
|
||||
class B_93x64_Ball : BulletBase {
|
||||
airFriction=-0.00106;
|
||||
typicalSpeed=880;
|
||||
ACE_caliber=0.366;
|
||||
ACE_bulletLength=1.350;
|
||||
ACE_bulletMass=230;
|
||||
ACE_caliber=9.296;
|
||||
ACE_bulletLength=34.29;
|
||||
ACE_bulletMass=14.904;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.368};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={850, 870, 880};
|
||||
ACE_barrelLengths[]={20, 24.41, 26};
|
||||
ACE_barrelLengths[]={508.0, 620.014, 660.4};
|
||||
};
|
||||
class B_408_Ball : BulletBase {
|
||||
timeToLive=10;
|
||||
airFriction=-0.000395;
|
||||
typicalSpeed=910;
|
||||
ACE_caliber=0.408;
|
||||
ACE_bulletLength=2.126;
|
||||
ACE_bulletMass=410;
|
||||
ACE_caliber=10.363;
|
||||
ACE_bulletLength=54.0;
|
||||
ACE_bulletMass=26.568;
|
||||
ACE_transonicStabilityCoef=1;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.97};
|
||||
@ -594,109 +594,109 @@ class CfgAmmo {
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={910};
|
||||
ACE_barrelLengths[]={29};
|
||||
ACE_barrelLengths[]={736.6};
|
||||
};
|
||||
class ACE_106x83mm_Ball : B_408_Ball {
|
||||
timeToLive=10;
|
||||
ACE_caliber=0.416;
|
||||
ACE_bulletLength=2.089;
|
||||
ACE_bulletMass=398;
|
||||
ACE_caliber=10.566;
|
||||
ACE_bulletLength=53.061;
|
||||
ACE_bulletMass=25.7904;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.72};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={960};
|
||||
ACE_barrelLengths[]={29};
|
||||
ACE_barrelLengths[]={736.6};
|
||||
};
|
||||
class B_338_Ball : BulletBase {
|
||||
timeToLive=10;
|
||||
airFriction=-0.000606;
|
||||
typicalSpeed=915;
|
||||
ACE_caliber=0.338;
|
||||
ACE_bulletLength=1.558;
|
||||
ACE_bulletMass=250;
|
||||
ACE_caliber=8.585;
|
||||
ACE_bulletLength=39.573;
|
||||
ACE_bulletMass=16.2;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.322};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={880, 915, 925};
|
||||
ACE_barrelLengths[]={20, 26, 28};
|
||||
ACE_barrelLengths[]={508.0, 660.4, 711.2};
|
||||
};
|
||||
class B_338_NM_Ball : BulletBase {
|
||||
airFriction=-0.000537;
|
||||
typicalSpeed=820;
|
||||
ACE_caliber=0.338;
|
||||
ACE_bulletLength=1.70;
|
||||
ACE_bulletMass=300;
|
||||
ACE_caliber=8.585;
|
||||
ACE_bulletLength=43.18;
|
||||
ACE_bulletMass=19.44;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.381};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={790, 807, 820};
|
||||
ACE_barrelLengths[]={20, 24, 26};
|
||||
ACE_barrelLengths[]={508.0, 609.6, 660.4};
|
||||
};
|
||||
class ACE_338_Ball : B_338_Ball {
|
||||
timeToLive=10;
|
||||
airFriction=-0.000535;
|
||||
typicalSpeed=826;
|
||||
ACE_caliber=0.338;
|
||||
ACE_bulletLength=1.70;
|
||||
ACE_bulletMass=300;
|
||||
ACE_caliber=8.585;
|
||||
ACE_bulletLength=43.18;
|
||||
ACE_bulletMass=19.44;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.381};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_muzzleVelocities[]={800, 820, 826, 830};
|
||||
ACE_barrelLengths[]={20, 24, 26.5, 28};
|
||||
ACE_barrelLengths[]={508.0, 609.6, 673.1, 711.2};
|
||||
};
|
||||
class ACE_338_Ball_API526 : B_338_Ball {
|
||||
timeToLive=10;
|
||||
airFriction=-0.000673;
|
||||
caliber=2.8;
|
||||
typicalSpeed=826;
|
||||
ACE_caliber=0.338;
|
||||
ACE_bulletLength=1.535;
|
||||
ACE_bulletMass=253;
|
||||
typicalSpeed=895;
|
||||
ACE_caliber=8.585;
|
||||
ACE_bulletLength=38.989;
|
||||
ACE_bulletMass=16.3941242;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.290};
|
||||
ACE_ballisticCoefficients[]={0.560};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
ACE_dragModel=7;
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={880, 915, 925};
|
||||
ACE_barrelLengths[]={20, 26, 28};
|
||||
ACE_barrelLengths[]={508.0, 660.4, 711.2};
|
||||
};
|
||||
class B_127x54_Ball : BulletBase {
|
||||
airFriction=-0.00014;
|
||||
typicalSpeed=300;
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.540;
|
||||
ACE_bulletMass=750;
|
||||
ACE_caliber=12.954;
|
||||
ACE_bulletLength=64.516;
|
||||
ACE_bulletMass=48.6;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={1.050};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={300};
|
||||
ACE_barrelLengths[]={17.2};
|
||||
ACE_barrelLengths[]={436.88};
|
||||
};
|
||||
class B_127x99_Ball : BulletBase {
|
||||
timeToLive=10;
|
||||
airFriction=-0.0006;
|
||||
typicalSpeed=900;
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.310;
|
||||
ACE_bulletMass=647;
|
||||
ACE_caliber=12.954;
|
||||
ACE_bulletLength=58.674;
|
||||
ACE_bulletMass=41.9256;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.670};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={900};
|
||||
ACE_barrelLengths[]={29};
|
||||
ACE_barrelLengths[]={736.6};
|
||||
};
|
||||
class ACE_127x99_API : BulletBase {
|
||||
timeToLive=10;
|
||||
@ -704,60 +704,60 @@ class CfgAmmo {
|
||||
typicalSpeed=900;
|
||||
hit=25;
|
||||
caliber=4.0;
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.310;
|
||||
ACE_bulletMass=648;
|
||||
ACE_caliber=12.954;
|
||||
ACE_bulletLength=58.674;
|
||||
ACE_bulletMass=41.9904;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.670};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={900};
|
||||
ACE_barrelLengths[]={29};
|
||||
ACE_barrelLengths[]={736.6};
|
||||
};
|
||||
class ACE_127x99_Ball_AMAX : B_127x99_Ball {
|
||||
timeToLive=10;
|
||||
airFriction=-0.000374;
|
||||
typicalSpeed=860;
|
||||
caliber=3.0;
|
||||
ACE_caliber=0.510;
|
||||
ACE_bulletLength=2.540;
|
||||
ACE_bulletMass=750;
|
||||
ACE_caliber=12.954;
|
||||
ACE_bulletLength=64.516;
|
||||
ACE_bulletMass=48.6;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={1.050};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={860};
|
||||
ACE_barrelLengths[]={29};
|
||||
ACE_barrelLengths[]={736.6};
|
||||
};
|
||||
class B_127x108_Ball : BulletBase {
|
||||
timeToLive=10;
|
||||
airFriction=-0.00064;
|
||||
typicalSpeed=820;
|
||||
ACE_caliber=0.511;
|
||||
ACE_bulletLength=2.520;
|
||||
ACE_bulletMass=745;
|
||||
ACE_caliber=12.979;
|
||||
ACE_bulletLength=64.008;
|
||||
ACE_bulletMass=48.276;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ballisticCoefficients[]={0.63};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={820};
|
||||
ACE_barrelLengths[]={28.7};
|
||||
ACE_barrelLengths[]={728.98};
|
||||
};
|
||||
class B_45ACP_Ball : BulletBase {
|
||||
airFriction=-0.0007182;
|
||||
typicalSpeed=250;
|
||||
ACE_caliber=0.452;
|
||||
ACE_bulletLength=0.68;
|
||||
ACE_bulletMass=230;
|
||||
ACE_caliber=11.481;
|
||||
ACE_bulletLength=17.272;
|
||||
ACE_bulletMass=14.904;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[]={0.195};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ASM";
|
||||
ACE_dragModel=1;
|
||||
ACE_muzzleVelocities[]={230, 250, 285};
|
||||
ACE_barrelLengths[]={4, 5, 9};
|
||||
ACE_barrelLengths[]={101.6, 127.0, 228.6};
|
||||
};
|
||||
};
|
||||
|
@ -190,7 +190,7 @@ class CfgVehicles {
|
||||
class ACE_Box_Ammo: NATO_Box_Base {
|
||||
scope = 2;
|
||||
accuracy = 1000;
|
||||
displayName = "[ACE] Ammo Supply Crate";
|
||||
displayName = "$STR_ACE_AmmoSupplyCrate_DisplayName";
|
||||
model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F";
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
class TransportMagazines {
|
||||
|
@ -1,16 +1,13 @@
|
||||
|
||||
class Single;
|
||||
class Burst;
|
||||
class FullAuto;
|
||||
class Mode_SemiAuto;
|
||||
class Mode_Burst;
|
||||
class Mode_FullAuto;
|
||||
|
||||
class CfgWeapons {
|
||||
class DMR_02_base_F;
|
||||
class DMR_03_base_F;
|
||||
class DMR_04_base_F;
|
||||
class DMR_05_base_F;
|
||||
class DMR_06_base_F;
|
||||
class GM6_base_F;
|
||||
class LMG_RCWS;
|
||||
class LRR_base_F;
|
||||
class MGun;
|
||||
class MGunCore;
|
||||
class MMG_01_base_F;
|
||||
@ -22,11 +19,57 @@ class CfgWeapons {
|
||||
|
||||
/* Long Rifles */
|
||||
|
||||
class EBR_base_F: Rifle_Long_Base_F {
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_B"};
|
||||
};
|
||||
class GM6_base_F: Rifle_Long_Base_F {
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
class LRR_base_F: Rifle_Long_Base_F {
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.00020; // radians. Equal to 0.70 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
class DMR_06_base_F: Rifle_Long_Base_F {
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
|
||||
};
|
||||
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
class DMR_05_base_F: Rifle_Long_Base_F {
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
|
||||
};
|
||||
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
class DMR_04_base_F: Rifle_Long_Base_F {
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
class DMR_03_base_F: Rifle_Long_Base_F {
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.00032; // radians. Equal to 1.10 MOA.
|
||||
};
|
||||
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00032; // radians. Equal to 1.10 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
class DMR_02_base_F: Rifle_Long_Base_F {
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.000262; // radians. Equal to 0.90 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
@ -36,6 +79,24 @@ class CfgWeapons {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_B"};
|
||||
};
|
||||
};
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.0004; // radians. Equal to 1.375 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
class EBR_base_F: Rifle_Long_Base_F {
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_B"};
|
||||
};
|
||||
};
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
|
||||
};
|
||||
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
/* MX */
|
||||
@ -46,14 +107,6 @@ class CfgWeapons {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_H"};
|
||||
};
|
||||
};
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.000800; // radians. Equal to 2.75 MOA.
|
||||
// Based on widely cited 2 MOA figure for new 5.56 ACR.
|
||||
};
|
||||
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00147; // radians. Equal to 5.1 MOA.
|
||||
};
|
||||
};
|
||||
class arifle_MX_SW_F: arifle_MX_Base_F {
|
||||
magazines[] = {
|
||||
@ -65,8 +118,8 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=9;
|
||||
ACE_barrelLength=16.0;
|
||||
ACE_barrelTwist=228.6;
|
||||
ACE_barrelLength=406.4;
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
// Shit is broken again
|
||||
@ -74,14 +127,6 @@ class CfgWeapons {
|
||||
compatibleItems[] = {"muzzle_snds_H","muzzle_snds_H_SW","ACE_muzzle_mzls_H"};
|
||||
};
|
||||
};
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.000800; // radians. Equal to 2.75 MOA.
|
||||
// Based on widely cited 2 MOA figure for new 5.56 ACR.
|
||||
};
|
||||
|
||||
class manual: FullAuto {
|
||||
dispersion = 0.00147; // radians. Equal to 5.1 MOA.
|
||||
};
|
||||
};
|
||||
class arifle_MXM_F: arifle_MX_Base_F {
|
||||
magazines[] = {
|
||||
@ -92,15 +137,14 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_65_Creedmor_mag"
|
||||
};
|
||||
initSpeed = -1.018;
|
||||
ACE_barrelTwist=9;
|
||||
ACE_barrelLength=18;
|
||||
ACE_barrelTwist=228.6;
|
||||
ACE_barrelLength=457.2;
|
||||
class Single: Single {
|
||||
dispersion = 0.00029; // radians. Equal to 1 MOA.
|
||||
// 6.5mm is easily capable of this in a half-tuned rifle.
|
||||
dispersion = 0.000436; // radians. Equal to 1.50 MOA.
|
||||
};
|
||||
|
||||
class FullAuto: FullAuto {
|
||||
dispersion = 0.000800; // radians. Equal to 2.75 MOA.
|
||||
dispersion = 0.000436; // radians. Equal to 1.50 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
@ -112,15 +156,6 @@ class CfgWeapons {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_H"};
|
||||
};
|
||||
};
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.000800; // radians. Equal to 2.75 MOA.
|
||||
// Based on widely cited 2 MOA figure for new 5.56 ACR?
|
||||
// Use your imagination for fictional weapons!
|
||||
};
|
||||
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00147; // radians. Equal to 5.1 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -137,15 +172,8 @@ class CfgWeapons {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_H"};
|
||||
};
|
||||
};
|
||||
ACE_barrelTwist=7;
|
||||
ACE_barrelLength=12.5;
|
||||
class manual: Mode_FullAuto {
|
||||
dispersion = 0.00175; // radians. Equal to 6 MOA.
|
||||
};
|
||||
|
||||
class Single: manual {
|
||||
dispersion = 0.00175; // radians. Equal to 6 MOA.
|
||||
};
|
||||
ACE_barrelTwist=177.8;
|
||||
ACE_barrelLength=317.5;
|
||||
};
|
||||
class LMG_Zafir_F: Rifle_Long_Base_F {
|
||||
initSpeed = -1.0;
|
||||
@ -154,15 +182,8 @@ class CfgWeapons {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_B"};
|
||||
};
|
||||
};
|
||||
ACE_barrelTwist=12;
|
||||
ACE_barrelLength=18.1;
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00175; // radians. Equal to 6 MOA.
|
||||
};
|
||||
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.00175; // radians. Equal to 6 MOA.
|
||||
};
|
||||
ACE_barrelTwist=304.8;
|
||||
ACE_barrelLength=459.74;
|
||||
};
|
||||
|
||||
|
||||
@ -173,13 +194,6 @@ class CfgWeapons {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_L"};
|
||||
};
|
||||
};
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.000727; // radians. Equal to 2.5 MOA, about the limit of mass-produced M855.
|
||||
};
|
||||
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00147; // radians. Equal to 5.1 MOA.
|
||||
};
|
||||
};
|
||||
class mk20_base_F: Rifle_Base_F {
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
@ -187,14 +201,6 @@ class CfgWeapons {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_L"};
|
||||
};
|
||||
};
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.0008727; // radians. Equal to 3 MOA, about the limit of mass-produced M855 plus
|
||||
// some extra for these worn out Greek Army service rifles.
|
||||
};
|
||||
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00147; // radians. Equal to 5.1 MOA.
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -202,12 +208,15 @@ class CfgWeapons {
|
||||
class SDAR_base_F: Rifle_Base_F {
|
||||
initSpeed = -0.989;
|
||||
class Single: Mode_SemiAuto {
|
||||
dispersion = 0.0008727; // radians. Equal to 3 MOA, about the limit of mass-produced M855 plus
|
||||
// some extra because Kel-Tec.
|
||||
dispersion = 0.0008727; // radians. Equal to 3 MOA.
|
||||
};
|
||||
|
||||
class Burst: Mode_Burst {
|
||||
dispersion = 0.0008727; // radians. Equal to 3 MOA.
|
||||
};
|
||||
|
||||
class FullAuto: Mode_FullAuto {
|
||||
dispersion = 0.00147; // radians. Equal to 5.1 MOA.
|
||||
dispersion = 0.0008727; // radians. Equal to 3 MOA.
|
||||
};
|
||||
};
|
||||
class pdw2000_base_F: Rifle_Base_F {
|
||||
@ -241,8 +250,8 @@ class CfgWeapons {
|
||||
|
||||
class hgun_P07_F: Pistol_Base_F {
|
||||
initSpeed = -0.9778;
|
||||
ACE_barrelTwist=10;
|
||||
ACE_barrelLength=4;
|
||||
ACE_barrelTwist=254.0;
|
||||
ACE_barrelLength=101.6;
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE";
|
||||
@ -253,8 +262,8 @@ class CfgWeapons {
|
||||
|
||||
class hgun_Rook40_F: Pistol_Base_F {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=10;
|
||||
ACE_barrelLength=4.4;
|
||||
ACE_barrelTwist=254.0;
|
||||
ACE_barrelLength=111.76;
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE";
|
||||
@ -265,8 +274,8 @@ class CfgWeapons {
|
||||
|
||||
class hgun_ACPC2_F: Pistol_Base_F {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=16;
|
||||
ACE_barrelLength=5;
|
||||
ACE_barrelTwist=406.4;
|
||||
ACE_barrelLength=127.0;
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_smg_01"};
|
||||
@ -276,8 +285,8 @@ class CfgWeapons {
|
||||
|
||||
class hgun_Pistol_heavy_01_F: Pistol_Base_F {
|
||||
initSpeed = -0.96;
|
||||
ACE_barrelTwist=16;
|
||||
ACE_barrelLength=4.5;
|
||||
ACE_barrelTwist=406.4;
|
||||
ACE_barrelLength=114.3;
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot: MuzzleSlot {
|
||||
compatibleItems[] += {"ACE_muzzle_mzls_smg_01"};
|
||||
@ -287,8 +296,8 @@ class CfgWeapons {
|
||||
|
||||
class hgun_Pistol_heavy_02_F: Pistol_Base_F {
|
||||
initSpeed = -0.92;
|
||||
ACE_barrelTwist=16;
|
||||
ACE_barrelLength=3;
|
||||
ACE_barrelTwist=406.4;
|
||||
ACE_barrelLength=76.2;
|
||||
/*
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
class MuzzleSlot {
|
||||
@ -300,8 +309,8 @@ class CfgWeapons {
|
||||
};
|
||||
class hgun_PDW2000_F: pdw2000_base_F {
|
||||
initSpeed = -1.157;
|
||||
ACE_barrelTwist=9;
|
||||
ACE_barrelLength=7;
|
||||
ACE_barrelTwist=228.6;
|
||||
ACE_barrelLength=177.8;
|
||||
};
|
||||
class arifle_Katiba_F: arifle_katiba_Base_F {
|
||||
magazines[] = {
|
||||
@ -310,8 +319,8 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -1.08;
|
||||
ACE_barrelTwist=8;
|
||||
ACE_barrelLength=28.7;
|
||||
ACE_barrelTwist=203.2;
|
||||
ACE_barrelLength=728.98;
|
||||
};
|
||||
class arifle_Katiba_C_F: arifle_katiba_Base_F {
|
||||
magazines[] = {
|
||||
@ -320,8 +329,8 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -1.07;
|
||||
ACE_barrelTwist=8;
|
||||
ACE_barrelLength=26.8;
|
||||
ACE_barrelTwist=203.2;
|
||||
ACE_barrelLength=680.72;
|
||||
};
|
||||
class arifle_Katiba_GL_F: arifle_katiba_Base_F {
|
||||
magazines[] = {
|
||||
@ -330,8 +339,8 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -1.08;
|
||||
ACE_barrelTwist=8;
|
||||
ACE_barrelLength=28.7;
|
||||
ACE_barrelTwist=203.2;
|
||||
ACE_barrelLength=728.98;
|
||||
};
|
||||
class arifle_MX_F: arifle_MX_Base_F {
|
||||
magazines[] = {
|
||||
@ -340,8 +349,8 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.99;
|
||||
ACE_barrelTwist=9;
|
||||
ACE_barrelLength=14.5;
|
||||
ACE_barrelTwist=228.6;
|
||||
ACE_barrelLength=368.3;
|
||||
};
|
||||
class arifle_MX_GL_F: arifle_MX_Base_F {
|
||||
magazines[] = {
|
||||
@ -350,13 +359,13 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.99;
|
||||
ACE_barrelTwist=9;
|
||||
ACE_barrelLength=14.5;
|
||||
ACE_barrelTwist=228.6;
|
||||
ACE_barrelLength=368.3;
|
||||
};
|
||||
/*
|
||||
class arifle_MX_SW_F: arifle_MX_Base_F {
|
||||
ACE_barrelTwist=9;
|
||||
ACE_barrelLength=16.0;
|
||||
ACE_barrelTwist=228.6;
|
||||
ACE_barrelLength=406.4;
|
||||
};
|
||||
*/
|
||||
class arifle_MXC_F: arifle_MX_Base_F {
|
||||
@ -366,13 +375,13 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.965;
|
||||
ACE_barrelTwist=8;
|
||||
ACE_barrelLength=10.5;
|
||||
ACE_barrelTwist=203.2;
|
||||
ACE_barrelLength=266.7;
|
||||
};
|
||||
/*
|
||||
class arifle_MXM_F: arifle_MX_Base_F {
|
||||
ACE_barrelTwist=9;
|
||||
ACE_barrelLength=18;
|
||||
ACE_barrelTwist=228.6;
|
||||
ACE_barrelLength=457.2;
|
||||
};
|
||||
*/
|
||||
class arifle_SDAR_F: SDAR_base_F {
|
||||
@ -388,13 +397,13 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.989;
|
||||
ACE_barrelTwist=11.25;
|
||||
ACE_barrelLength=18;
|
||||
ACE_barrelTwist=285.75;
|
||||
ACE_barrelLength=457.2;
|
||||
};
|
||||
class SMG_02_F: SMG_02_base_F {
|
||||
initSpeed = -1.054;
|
||||
ACE_barrelTwist=10;
|
||||
ACE_barrelLength=7.7;
|
||||
ACE_barrelTwist=254.0;
|
||||
ACE_barrelLength=195.58;
|
||||
};
|
||||
class arifle_TRG20_F: Tavor_base_F {
|
||||
magazines[] = {
|
||||
@ -408,8 +417,8 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.95;
|
||||
ACE_barrelTwist=7;
|
||||
ACE_barrelLength=15;
|
||||
ACE_barrelTwist=177.8;
|
||||
ACE_barrelLength=381.0;
|
||||
};
|
||||
class arifle_TRG21_F: Tavor_base_F {
|
||||
magazines[] = {
|
||||
@ -423,8 +432,8 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.989;
|
||||
ACE_barrelTwist=7;
|
||||
ACE_barrelLength=18.1;
|
||||
ACE_barrelTwist=177.8;
|
||||
ACE_barrelLength=459.74;
|
||||
};
|
||||
class arifle_TRG21_GL_F: arifle_TRG21_F {
|
||||
magazines[] = {
|
||||
@ -438,13 +447,13 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.989;
|
||||
ACE_barrelTwist=7;
|
||||
ACE_barrelLength=18.1;
|
||||
ACE_barrelTwist=177.8;
|
||||
ACE_barrelLength=459.74;
|
||||
};
|
||||
/*
|
||||
class LMG_Zafir_F: Rifle_Long_Base_F {
|
||||
ACE_barrelTwist=12;
|
||||
ACE_barrelLength=18.1;
|
||||
ACE_barrelTwist=304.8;
|
||||
ACE_barrelLength=459.74;
|
||||
};
|
||||
*/
|
||||
class arifle_Mk20_F: mk20_base_F {
|
||||
@ -459,8 +468,8 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.98;
|
||||
ACE_barrelTwist=7;
|
||||
ACE_barrelLength=17.4;
|
||||
ACE_barrelTwist=177.8;
|
||||
ACE_barrelLength=441.96;
|
||||
};
|
||||
class arifle_Mk20C_F: mk20_base_F {
|
||||
magazines[] = {
|
||||
@ -474,8 +483,8 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.956;
|
||||
ACE_barrelTwist=7;
|
||||
ACE_barrelLength=16;
|
||||
ACE_barrelTwist=177.8;
|
||||
ACE_barrelLength=406.4;
|
||||
};
|
||||
class arifle_Mk20_GL_F: mk20_base_F {
|
||||
magazines[] = {
|
||||
@ -489,13 +498,13 @@ class CfgWeapons {
|
||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||
};
|
||||
initSpeed = -0.956;
|
||||
ACE_barrelTwist=7;
|
||||
ACE_barrelLength=16;
|
||||
ACE_barrelTwist=177.8;
|
||||
ACE_barrelLength=406.4;
|
||||
};
|
||||
class SMG_01_F: SMG_01_Base {
|
||||
initSpeed = -1.016;
|
||||
ACE_barrelTwist=16;
|
||||
ACE_barrelLength=5.5;
|
||||
ACE_barrelTwist=406.4;
|
||||
ACE_barrelLength=139.7;
|
||||
};
|
||||
class srifle_DMR_01_F: DMR_01_base_F {
|
||||
magazines[] = {
|
||||
@ -503,8 +512,8 @@ class CfgWeapons {
|
||||
"ACE_10Rnd_762x54_Tracer_mag"
|
||||
};
|
||||
initSpeed = -1.025;
|
||||
ACE_barrelTwist=9.5;
|
||||
ACE_barrelLength=24;
|
||||
ACE_barrelTwist=241.3;
|
||||
ACE_barrelLength=609.6;
|
||||
};
|
||||
class srifle_EBR_F: EBR_base_F {
|
||||
magazines[] = {
|
||||
@ -518,20 +527,20 @@ class CfgWeapons {
|
||||
"ACE_20Rnd_762x51_Mag_SD"
|
||||
};
|
||||
initSpeed = -0.9724;
|
||||
ACE_barrelTwist=12;
|
||||
ACE_barrelLength=18;
|
||||
ACE_barrelTwist=304.8;
|
||||
ACE_barrelLength=457.2;
|
||||
};
|
||||
/*
|
||||
class LMG_Mk200_F: Rifle_Long_Base_F {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=7;
|
||||
ACE_barrelLength=12.5;
|
||||
ACE_barrelTwist=177.8;
|
||||
ACE_barrelLength=317.5;
|
||||
};
|
||||
*/
|
||||
class srifle_LRR_F: LRR_base_F {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=13;
|
||||
ACE_barrelLength=29;
|
||||
ACE_barrelTwist=330.2;
|
||||
ACE_barrelLength=736.6;
|
||||
};
|
||||
class srifle_GM6_F: GM6_base_F {
|
||||
magazines[] = {
|
||||
@ -542,8 +551,8 @@ class CfgWeapons {
|
||||
"ACE_5Rnd_127x99_AMAX_Mag"
|
||||
};
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=15;
|
||||
ACE_barrelLength=36.6;
|
||||
ACE_barrelTwist=381.0;
|
||||
ACE_barrelLength=929.64;
|
||||
};
|
||||
class srifle_DMR_02_F: DMR_02_base_F {
|
||||
magazines[] = {
|
||||
@ -555,8 +564,8 @@ class CfgWeapons {
|
||||
"ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag"
|
||||
};
|
||||
initSpeed = -0.962;
|
||||
ACE_barrelTwist=10;
|
||||
ACE_barrelLength=20;
|
||||
ACE_barrelTwist=254.0;
|
||||
ACE_barrelLength=508.0;
|
||||
};
|
||||
class srifle_DMR_03_F: DMR_03_base_F {
|
||||
magazines[] = {
|
||||
@ -570,18 +579,18 @@ class CfgWeapons {
|
||||
"ACE_20Rnd_762x51_Mag_SD"
|
||||
};
|
||||
initSpeed = -0.9843;
|
||||
ACE_barrelTwist=10;
|
||||
ACE_barrelLength=20;
|
||||
ACE_barrelTwist=254.0;
|
||||
ACE_barrelLength=508.0;
|
||||
};
|
||||
class srifle_DMR_04_F: DMR_04_base_F {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=8;
|
||||
ACE_barrelLength=17.72;
|
||||
ACE_barrelTwist=203.2;
|
||||
ACE_barrelLength=450.088;
|
||||
};
|
||||
class srifle_DMR_05_blk_F: DMR_05_base_F {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=14.17;
|
||||
ACE_barrelLength=24.41;
|
||||
ACE_barrelTwist=359.918;
|
||||
ACE_barrelLength=620.014;
|
||||
};
|
||||
class srifle_DMR_06_camo_F: DMR_06_base_F {
|
||||
magazines[] = {
|
||||
@ -595,18 +604,18 @@ class CfgWeapons {
|
||||
"ACE_20Rnd_762x51_Mag_SD"
|
||||
};
|
||||
initSpeed = -0.9916;
|
||||
ACE_barrelTwist=12;
|
||||
ACE_barrelLength=22;
|
||||
ACE_barrelTwist=304.8;
|
||||
ACE_barrelLength=558.8;
|
||||
};
|
||||
class MMG_01_hex_F: MMG_01_base_F {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=14.17;
|
||||
ACE_barrelLength=21.65;
|
||||
ACE_barrelTwist=359.918;
|
||||
ACE_barrelLength=549.91;
|
||||
};
|
||||
class MMG_02_camo_F: MMG_02_base_F {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=9.25;
|
||||
ACE_barrelLength=24;
|
||||
ACE_barrelTwist=234.95;
|
||||
ACE_barrelLength=609.6;
|
||||
};
|
||||
|
||||
class HMG_127 : LMG_RCWS {
|
||||
@ -615,8 +624,8 @@ class CfgWeapons {
|
||||
};
|
||||
class HMG_M2: HMG_01 {
|
||||
initSpeed = -1.0;
|
||||
ACE_barrelTwist=12;
|
||||
ACE_barrelLength=45;
|
||||
ACE_barrelTwist=304.8;
|
||||
ACE_barrelLength=1143.0;
|
||||
};
|
||||
|
||||
/* Silencers */
|
||||
@ -642,11 +651,11 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class MuzzleCoef {
|
||||
dispersionCoef = "0.8f";
|
||||
dispersionCoef = "0.95f";
|
||||
artilleryDispersionCoef = "1.0f";
|
||||
fireLightCoef = "0.5f";
|
||||
recoilCoef = "1.0f";
|
||||
recoilProneCoef = "1.0f";
|
||||
recoilCoef = "0.95f";
|
||||
recoilProneCoef = "0.95f";
|
||||
minRangeCoef = "1.0f";
|
||||
minRangeProbabCoef = "1.0f";
|
||||
midRangeCoef = "1.0f";
|
||||
@ -675,11 +684,11 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class MuzzleCoef {
|
||||
dispersionCoef = "0.8f";
|
||||
dispersionCoef = "0.95f";
|
||||
artilleryDispersionCoef = "1.0f";
|
||||
fireLightCoef = "0.5f";
|
||||
recoilCoef = "1.0f";
|
||||
recoilProneCoef = "1.0f";
|
||||
recoilCoef = "0.95f";
|
||||
recoilProneCoef = "0.95f";
|
||||
minRangeCoef = "1.0f";
|
||||
minRangeProbabCoef = "1.0f";
|
||||
midRangeCoef = "1.0f";
|
||||
@ -708,11 +717,11 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class MuzzleCoef {
|
||||
dispersionCoef = "0.8f";
|
||||
dispersionCoef = "0.95f";
|
||||
artilleryDispersionCoef = "1.0f";
|
||||
fireLightCoef = "0.5f";
|
||||
recoilCoef = "1.0f";
|
||||
recoilProneCoef = "1.0f";
|
||||
recoilCoef = "0.95f";
|
||||
recoilProneCoef = "0.95f";
|
||||
minRangeCoef = "1.0f";
|
||||
minRangeProbabCoef = "1.0f";
|
||||
midRangeCoef = "1.0f";
|
||||
@ -741,11 +750,11 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class MuzzleCoef {
|
||||
dispersionCoef = "0.8f";
|
||||
dispersionCoef = "0.95f";
|
||||
artilleryDispersionCoef = "1.0f";
|
||||
fireLightCoef = "0.5f";
|
||||
recoilCoef = "1.0f";
|
||||
recoilProneCoef = "1.0f";
|
||||
recoilCoef = "0.95f";
|
||||
recoilProneCoef = "0.95f";
|
||||
minRangeCoef = "1.0f";
|
||||
minRangeProbabCoef = "1.0f";
|
||||
midRangeCoef = "1.0f";
|
||||
@ -774,11 +783,11 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class MuzzleCoef {
|
||||
dispersionCoef = "0.8f";
|
||||
dispersionCoef = "0.95f";
|
||||
artilleryDispersionCoef = "1.0f";
|
||||
fireLightCoef = "0.5f";
|
||||
recoilCoef = "1.0f";
|
||||
recoilProneCoef = "1.0f";
|
||||
recoilCoef = "0.95f";
|
||||
recoilProneCoef = "0.95f";
|
||||
minRangeCoef = "1.0f";
|
||||
minRangeProbabCoef = "1.0f";
|
||||
midRangeCoef = "1.0f";
|
||||
@ -807,11 +816,11 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class MuzzleCoef {
|
||||
dispersionCoef = "0.8f";
|
||||
dispersionCoef = "0.95f";
|
||||
artilleryDispersionCoef = "1.0f";
|
||||
fireLightCoef = "0.5f";
|
||||
recoilCoef = "1.0f";
|
||||
recoilProneCoef = "1.0f";
|
||||
recoilCoef = "0.95f";
|
||||
recoilProneCoef = "0.95f";
|
||||
minRangeCoef = "1.0f";
|
||||
minRangeProbabCoef = "1.0f";
|
||||
midRangeCoef = "1.0f";
|
||||
@ -840,11 +849,11 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class MuzzleCoef {
|
||||
dispersionCoef = "0.8f";
|
||||
dispersionCoef = "0.95f";
|
||||
artilleryDispersionCoef = "1.0f";
|
||||
fireLightCoef = "0.5f";
|
||||
recoilCoef = "1.0f";
|
||||
recoilProneCoef = "1.0f";
|
||||
recoilCoef = "0.95f";
|
||||
recoilProneCoef = "0.95f";
|
||||
minRangeCoef = "1.0f";
|
||||
minRangeProbabCoef = "1.0f";
|
||||
midRangeCoef = "1.0f";
|
||||
@ -873,11 +882,11 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class MuzzleCoef {
|
||||
dispersionCoef = "0.8f";
|
||||
dispersionCoef = "0.95f";
|
||||
artilleryDispersionCoef = "1.0f";
|
||||
fireLightCoef = "0.5f";
|
||||
recoilCoef = "1.0f";
|
||||
recoilProneCoef = "1.0f";
|
||||
recoilCoef = "0.95f";
|
||||
recoilProneCoef = "0.95f";
|
||||
minRangeCoef = "1.0f";
|
||||
minRangeProbabCoef = "1.0f";
|
||||
midRangeCoef = "1.0f";
|
||||
@ -906,11 +915,11 @@ class CfgWeapons {
|
||||
};
|
||||
|
||||
class MuzzleCoef {
|
||||
dispersionCoef = "0.8f";
|
||||
dispersionCoef = "0.95f";
|
||||
artilleryDispersionCoef = "1.0f";
|
||||
fireLightCoef = "0.5f";
|
||||
recoilCoef = "1.0f";
|
||||
recoilProneCoef = "1.0f";
|
||||
recoilCoef = "0.95f";
|
||||
recoilProneCoef = "0.95f";
|
||||
minRangeCoef = "1.0f";
|
||||
minRangeProbabCoef = "1.0f";
|
||||
midRangeCoef = "1.0f";
|
||||
|
@ -1,12 +1,12 @@
|
||||
ace_ballistics
|
||||
==============
|
||||
|
||||
Changes to weapon and ammunition values.
|
||||
|
||||
Changes to weapon, magazine and ammunition values.
|
||||
|
||||
## Maintainers
|
||||
|
||||
The people responsible for merging changes to this component or answering potential questions.
|
||||
|
||||
- [Ruthberg] (http://github.com/Ulteq)
|
||||
- [KoffeinFlummi](https://github.com/KoffeinFlummi)
|
||||
- [commy2](https://github.com/commy2)
|
||||
|
@ -483,7 +483,7 @@
|
||||
<Spanish>Cargador de 10 balas trazadoras de 9.3mm</Spanish>
|
||||
<Russian>Магазин из 10-ти 9,3 мм трассирующих</Russian>
|
||||
<Italian>9.3mm 10Rnd Tracer Mag</Italian>
|
||||
<Czech>9.3mm 10Rnd Svítící Zásobník</Czech>
|
||||
<Czech>9.3mm 10náb. Svítící Zásobník</Czech>
|
||||
<Portuguese>Carregador de 10 cartuchos 9.3mm traçantes </Portuguese>
|
||||
<Hungarian>9,3mm 10-lövedékes nyomkövető tár</Hungarian>
|
||||
</Key>
|
||||
@ -532,7 +532,7 @@
|
||||
<Spanish>9.3mm IR-DIM</Spanish>
|
||||
<Russian>9,3 мм ИК-трассирующие</Russian>
|
||||
<Italian>9.3mm IR-DIM</Italian>
|
||||
<Portuguese>9.3mm Traçante IR-DIM</Portuguese>
|
||||
<Portuguese>9.3mm IR-DIM</Portuguese>
|
||||
<Hungarian>9,3mm infravörös nyomkövető</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimDescription">
|
||||
@ -746,10 +746,10 @@
|
||||
<French>7.62mm</French>
|
||||
<Spanish>7.62mm</Spanish>
|
||||
<Russian>7,62 мм</Russian>
|
||||
<German>7,62x54mm </German>
|
||||
<Italian>7.62mm IR-DIM</Italian>
|
||||
<German>7,62mm</German>
|
||||
<Italian>7.62mm</Italian>
|
||||
<Czech>7.62mm</Czech>
|
||||
<Portuguese>7.62mm Traçante</Portuguese>
|
||||
<Portuguese>7.62mm</Portuguese>
|
||||
<Hungarian>7,62mm</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_762x54_Tracer_mag_Description">
|
||||
@ -960,7 +960,7 @@
|
||||
<English>7.62mm M118LR</English>
|
||||
<Polish>7,62mm M118LR</Polish>
|
||||
<French>7.62mm M118LR</French>
|
||||
<Spanish>7.62mm (M118LR)</Spanish>
|
||||
<Spanish>7.62mm M118LR</Spanish>
|
||||
<Russian>7,62 мм M118LR</Russian>
|
||||
<German>7,62mm M118LR</German>
|
||||
<Italian>7.62mm M118LR</Italian>
|
||||
@ -996,7 +996,7 @@
|
||||
<English>7.62mm M118LR</English>
|
||||
<Polish>7,62mm M118LR</Polish>
|
||||
<French>7.62mm M118LR</French>
|
||||
<Spanish>7.62mm (M118LR)</Spanish>
|
||||
<Spanish>7.62mm M118LR</Spanish>
|
||||
<Russian>7,62 мм M118LR</Russian>
|
||||
<German>7,62mm M118LR</German>
|
||||
<Italian>7.62mm M118LR</Italian>
|
||||
@ -1245,16 +1245,16 @@
|
||||
<Hungarian>7,62mm 20-lövedékes tár (Mk248 Mod 0)</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_NameShort">
|
||||
<English>7.62mm (Mk248 Mod 0)</English>
|
||||
<Polish>7,62mm (Mk248 Mod 0)</Polish>
|
||||
<French>7.62mm (Mk248 Mod 0)</French>
|
||||
<Spanish>7.62mm (Mk248 Mod 0)</Spanish>
|
||||
<Russian>7,62 мм (Mk248 Mod 0)</Russian>
|
||||
<German>7,62mm (Mk248 Mod 0)</German>
|
||||
<Italian>7.62mm (Mk248 Mod 0)</Italian>
|
||||
<Czech>7.62mm (Mk248 Mod 0)</Czech>
|
||||
<Portuguese>7.62mm (Mk248 Mod 0)</Portuguese>
|
||||
<Hungarian>7,62mm (Mk248 Mod 0)</Hungarian>
|
||||
<English>7.62mm Mk248</English>
|
||||
<Polish>7,62mm Mk248</Polish>
|
||||
<French>7.62mm Mk248</French>
|
||||
<Spanish>7.62mm Mk248</Spanish>
|
||||
<Russian>7,62 мм Mk248</Russian>
|
||||
<German>7,62mm Mk248</German>
|
||||
<Italian>7.62mm Mk248</Italian>
|
||||
<Czech>7.62mm Mk248</Czech>
|
||||
<Portuguese>7.62mm Mk248</Portuguese>
|
||||
<Hungarian>7,62mm Mk248</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Description">
|
||||
<English>Caliber: 7.62x67mm NATO (Mk248 Mod 0)<br />Rounds: 20</English>
|
||||
@ -1281,16 +1281,16 @@
|
||||
<Hungarian>7,62mm 20-lövedékes tár (Mk248 Mod 1)</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_NameShort">
|
||||
<English>7.62mm (Mk248 Mod 1)</English>
|
||||
<Polish>7,62mm (Mk248 Mod 1)</Polish>
|
||||
<French>7.62mm (Mk248 Mod 1)</French>
|
||||
<Spanish>7.62mm (Mk248 Mod 1)</Spanish>
|
||||
<Russian>7,62 мм (Mk248 Mod 1)</Russian>
|
||||
<German>7,62mm (Mk248 Mod 1)</German>
|
||||
<Italian>7.62mm (Mk248 Mod 1)</Italian>
|
||||
<Czech>7.62mm (Mk248 Mod 1)</Czech>
|
||||
<Portuguese>7.62mm (Mk248 Mod 1)</Portuguese>
|
||||
<Hungarian>7,62mm (Mk248 Mod 1)</Hungarian>
|
||||
<English>7.62mm Mk248</English>
|
||||
<Polish>7,62mm Mk248</Polish>
|
||||
<French>7.62mm Mk248</French>
|
||||
<Spanish>7.62mm Mk248</Spanish>
|
||||
<Russian>7,62 мм Mk248</Russian>
|
||||
<German>7,62mm Mk248</German>
|
||||
<Italian>7.62mm Mk248</Italian>
|
||||
<Czech>7.62mm Mk248</Czech>
|
||||
<Portuguese>7.62mm Mk248</Portuguese>
|
||||
<Hungarian>7,62mm Mk248</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_1_Mag_Description">
|
||||
<English>Caliber: 7.62x67mm NATO (Mk248 Mod 1)<br />Rounds: 20</English>
|
||||
@ -1317,16 +1317,16 @@
|
||||
<Hungarian>7,62mm 20-lövedékes tár (Berger Hybrid OTM)</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_NameShort">
|
||||
<English>7.62mm (OTM)</English>
|
||||
<Polish>7,62mm (OTM)</Polish>
|
||||
<French>7.62mm (OTM)</French>
|
||||
<Spanish>7.62mm (OTM)</Spanish>
|
||||
<Russian>7,62 мм (OTM)</Russian>
|
||||
<German>7,62mm (OTM)</German>
|
||||
<Italian>7.62mm (OTM)</Italian>
|
||||
<Czech>7.62mm (OTM)</Czech>
|
||||
<Portuguese>7.62mm (OTM)</Portuguese>
|
||||
<Hungarian>7,62mm (OTM)</Hungarian>
|
||||
<English>7.62mm OTM</English>
|
||||
<Polish>7,62mm OTM</Polish>
|
||||
<French>7.62mm OTM</French>
|
||||
<Spanish>7.62mm OTM</Spanish>
|
||||
<Russian>7,62 мм OTM</Russian>
|
||||
<German>7,62mm OTM</German>
|
||||
<Italian>7.62mm OTM</Italian>
|
||||
<Czech>7.62mm OTM</Czech>
|
||||
<Portuguese>7.62mm OTM</Portuguese>
|
||||
<Hungarian>7,62mm OTM</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag_Description">
|
||||
<English>Caliber: 7.62x67mm NATO (Berger Hybrid OTM)<br />Rounds: 20</English>
|
||||
@ -1431,7 +1431,7 @@
|
||||
<Polish>.338 HPBT</Polish>
|
||||
<Russian>.338 экспансивные</Russian>
|
||||
<German>.338 HPBT</German>
|
||||
<Italian>.338 (HPBT)</Italian>
|
||||
<Italian>.338 HPBT</Italian>
|
||||
<Czech>.338 HPBT</Czech>
|
||||
<Portuguese>.338 HPBT</Portuguese>
|
||||
<Hungarian>.338 HPBT</Hungarian>
|
||||
@ -1592,5 +1592,9 @@
|
||||
<Portuguese>Calibre: 12.7x99mm (AMAX)<br/>Cartuchos: 5</Portuguese>
|
||||
<Hungarian>Kaliber: 12,7x99mm (AMAX)<br />Lövedékek: 5</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_AmmoSupplyCrate_DisplayName">
|
||||
<English>[ACE] Ammo Supply Crate</English>
|
||||
<Polish>[ACE] Skrzynka z amunicją</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -161,7 +161,7 @@ class CfgVehicles {
|
||||
class GVAR(ModuleSurrender): Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "Make Unit Surrender";
|
||||
displayName = "$STR_ACE_Captives_ModuleSurrender_DisplayName"; //Make Unit Surrender
|
||||
function = QUOTE(DFUNC(moduleSurrender));
|
||||
scope = 2; //show in editor
|
||||
scopeCurator = 2; //show in zeus
|
||||
@ -172,7 +172,7 @@ class CfgVehicles {
|
||||
functionPriority = 0;
|
||||
class Arguments {};
|
||||
class ModuleDescription: ModuleDescription {
|
||||
description = "Sync a unit to make them surrender.<br/>Source: ace_captives";
|
||||
description = "$STR_ACE_Captives_ModuleSurrender_Description"; //Sync a unit to make them surrender.<br/>Source: ace_captives
|
||||
sync[] = {"AnyAI"};
|
||||
};
|
||||
};
|
||||
|
@ -11,7 +11,7 @@ if (isServer) then {
|
||||
_escortedUnit = _disconnectedPlayer getVariable [QGVAR(escortedUnit), objNull];
|
||||
if ((!isNull _escortedUnit) && {(attachedTo _escortedUnit) == _disconnectedPlayer}) then {
|
||||
detach _escortedUnit;
|
||||
systemChat "debug: DC detach";
|
||||
//systemChat "debug: DC detach";
|
||||
};
|
||||
if (_disconnectedPlayer getVariable [QGVAR(isEscorting), false]) then {
|
||||
_disconnectedPlayer setVariable [QGVAR(isEscorting), false, true];
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Checks the conditions for being able to surrender
|
||||
* Checks the conditions for being able switch surrender states
|
||||
*
|
||||
* Arguments:
|
||||
* 0: caller (player) <OBJECT>
|
||||
@ -18,14 +18,14 @@
|
||||
|
||||
PARAMS_2(_unit,_newSurrenderState);
|
||||
|
||||
if (currentWeapon _unit != "") exitWith {false};
|
||||
|
||||
private "_returnValue";
|
||||
|
||||
_returnValue = if (_newSurrenderState) then {
|
||||
!(_unit getVariable [QGVAR(isSurrendering), false]); //Not currently surrendering
|
||||
//no weapon equiped AND not currently surrendering and
|
||||
(currentWeapon _unit == "") && {!(_unit getVariable [QGVAR(isSurrendering), false])}
|
||||
} else {
|
||||
(_unit getVariable [QGVAR(isSurrendering), false]); //is Surrendering
|
||||
//is Surrendering
|
||||
(_unit getVariable [QGVAR(isSurrendering), false])
|
||||
};
|
||||
|
||||
_returnValue
|
||||
|
@ -8,7 +8,7 @@
|
||||
<French>Capturer le prisonnier</French>
|
||||
<Polish>Aresztuj</Polish>
|
||||
<Czech>Zajmout Osobu</Czech>
|
||||
<Italian>Arresta il Prigioniero</Italian>
|
||||
<Italian>Arresta il prigioniero</Italian>
|
||||
<Portuguese>Tomar Prisioneiro</Portuguese>
|
||||
<Hungarian>Foglyul ejtés</Hungarian>
|
||||
<Russian>Взять в плен</Russian>
|
||||
@ -20,7 +20,7 @@
|
||||
<Polish>Wypuść więźnia</Polish>
|
||||
<French>Libérer le prisonnier</French>
|
||||
<Czech>Osvobodit Zajatce</Czech>
|
||||
<Italian>Libera il Prigioniero</Italian>
|
||||
<Italian>Libera il prigioniero</Italian>
|
||||
<Portuguese>Libertar Prisioneiro</Portuguese>
|
||||
<Hungarian>Fogoly szabadon engedése</Hungarian>
|
||||
<Russian>Освободить пленника</Russian>
|
||||
@ -71,7 +71,7 @@
|
||||
<Hungarian>Fogoly berakása</Hungarian>
|
||||
<Russian>Загрузить пленного</Russian>
|
||||
<Portuguese>Embarcar Prisioneiro</Portuguese>
|
||||
<Italian>Carica il prigioniero</Italian>
|
||||
<Italian>Fai salire il prigioniero</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_UnloadCaptive">
|
||||
<English>Unload Captive</English>
|
||||
@ -83,7 +83,7 @@
|
||||
<Hungarian>Fogoly kivevése</Hungarian>
|
||||
<Russian>Выгрузить пленного</Russian>
|
||||
<Portuguese>Desembarcar Prisioneiro</Portuguese>
|
||||
<Italian>Scarica il prigioniero</Italian>
|
||||
<Italian>Fai scendere il prigioniero</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_CableTie">
|
||||
<English>Cable Tie</English>
|
||||
@ -105,7 +105,7 @@
|
||||
<French>Les Serflex permettent de menotter les prisonniers.</French>
|
||||
<Czech>Stahovací pásky vám umožní zadržet vězně.</Czech>
|
||||
<Portuguese>A algema plástica permite que você contenha prisioneiros.</Portuguese>
|
||||
<Italian>Fascietta che ti consente di arrestare i prigionieri.</Italian>
|
||||
<Italian>Fascetta per arrestare i prigionieri</Italian>
|
||||
<Hungarian>Gyorskötöző, emberek foglyulejtéséhez használható.</Hungarian>
|
||||
<Russian>Кабельные стяжки позволяют связывать пленников.</Russian>
|
||||
</Key>
|
||||
@ -119,7 +119,7 @@
|
||||
<Polish>Ekwipunek rewidowanej osoby</Polish>
|
||||
<Russian>Инвентарь обысканного человека</Russian>
|
||||
<Portuguese>Inventário da pessoa revistada</Portuguese>
|
||||
<Italian>Inventario delle persone perquisite</Italian>
|
||||
<Italian>Inventario della persona perquisita</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_FriskPerson">
|
||||
<English>Frisk person</English>
|
||||
@ -143,7 +143,7 @@
|
||||
<Polish>Poddaj się</Polish>
|
||||
<Russian>Сдаться</Russian>
|
||||
<Hungarian>Megadás</Hungarian>
|
||||
<Italian>Arreso</Italian>
|
||||
<Italian>Arrenditi</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_StopSurrendering">
|
||||
<English>Stop Surrendering</English>
|
||||
@ -155,7 +155,7 @@
|
||||
<Polish>Podejmij walkę ponownie</Polish>
|
||||
<Russian>Прекратить сдачу в плен</Russian>
|
||||
<Hungarian>Megadás abbahagyása</Hungarian>
|
||||
<Italian>Annulla la resa</Italian>
|
||||
<Italian>Smetti di arrenderti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_Zeus_OnlyAlive">
|
||||
<English>Only use on alive units</English>
|
||||
@ -191,7 +191,15 @@
|
||||
<Polish>Nie ma nic pod kursorem</Polish>
|
||||
<Russian>Ничего не выделено</Russian>
|
||||
<Hungarian>Semmi sincs az egér alatt</Hungarian>
|
||||
<Italian>Niente selezionato</Italian>
|
||||
<Italian>Nessuna selezione</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSurrender_DisplayName">
|
||||
<English>Make Unit Surrender</English>
|
||||
<Polish>Poddaj się!</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
|
||||
<English>Sync a unit to make them surrender.<br />Source: ace_captives</English>
|
||||
<Polish>Zsynchronizuj z jednostką aby sprawić by się poddała<br />Źródło: ace_captives</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -25,72 +25,72 @@ class CfgVehicles {
|
||||
// += needs a non inherited entry in that class, otherwise it simply overwrites
|
||||
//#include <DefaultItems.hpp>
|
||||
|
||||
class Module_F;
|
||||
class ACE_ModuleCheckPBOs: Module_F {
|
||||
class Logic;
|
||||
class Module_F: Logic {
|
||||
class ModuleDescription {};
|
||||
};
|
||||
class ACE_ModuleCheckPBOs: Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "Check PBOs";
|
||||
displayName = "$STR_ACE_Common_CheckPBO_DisplayName";
|
||||
function = QFUNC(moduleCheckPBOs);
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = QUOTE(PATHTOF(UI\Icon_Module_CheckPBO_ca.paa));
|
||||
class Arguments {
|
||||
class Action {
|
||||
displayName = "Action";
|
||||
description = "What to do with people who do not have the right PBOs?";
|
||||
displayName = "$STR_ACE_Common_CheckPBO_Action_DisplayName";
|
||||
description = "$STR_ACE_Common_CheckPBO_Action_Description";
|
||||
class values {
|
||||
class WarnOnce {
|
||||
default = 1;
|
||||
name = "Warn once";
|
||||
name = "$STR_ACE_Common_CheckPBO_Action_WarnOnce";
|
||||
value = 0;
|
||||
};
|
||||
class Warn {
|
||||
name = "Warn (permanent)";
|
||||
name = "$STR_ACE_Common_CheckPBO_Action_WarnPerm";
|
||||
value = 1;
|
||||
};
|
||||
class Kick {
|
||||
name = "Kick";
|
||||
name = "$STR_ACE_Common_CheckPBO_Action_Kick";
|
||||
value = 2;
|
||||
};
|
||||
};
|
||||
};
|
||||
class CheckAll {
|
||||
displayName = "Check all addons";
|
||||
description = "Check all addons instead of only those of ACE?";
|
||||
displayName = "$STR_ACE_Common_CheckPBO_CheckAll_DisplayName";
|
||||
description = "$STR_ACE_Common_CheckPBO_CheckAll_Description";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class WarnOnce {
|
||||
default = 1;
|
||||
name = "No";
|
||||
value = 0;
|
||||
};
|
||||
class Warn {
|
||||
name = "Yes";
|
||||
value = 1;
|
||||
};
|
||||
};
|
||||
defaultValue = 0;
|
||||
};
|
||||
class Whitelist {
|
||||
displayName = "Whitelist";
|
||||
description = "What addons are allowed regardless?";
|
||||
displayName = "$STR_ACE_Common_CheckPBO_Whitelist_DisplayName";
|
||||
description = "$STR_ACE_Common_CheckPBO_Whitelist_Description";
|
||||
typeName = "STRING";
|
||||
class values {
|
||||
default = "[]";
|
||||
};
|
||||
};
|
||||
};
|
||||
class ModuleDescription: ModuleDescription {
|
||||
description = "$STR_ACE_Common_CheckPBO_Description";
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_ModuleLSDVehicles: Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "LSD Vehicles";
|
||||
displayName = "$STR_ACE_Common_LSDVehicles_DisplayName";
|
||||
function = "ACE_Common_fnc_moduleLSDVehicles";
|
||||
scope = 2;
|
||||
icon = QUOTE(PATHTOF(UI\Icon_Module_LSD_ca.paa));
|
||||
isGlobal = 1;
|
||||
class Arguments {
|
||||
};
|
||||
class ModuleDescription: ModuleDescription {
|
||||
description = "$STR_ACE_Common_LSDVehicles_Description";
|
||||
sync[] = {"AnyVehicle"};
|
||||
};
|
||||
};
|
||||
|
||||
class Box_NATO_Support_F;
|
||||
|
@ -64,8 +64,6 @@ if (_currentVersion != _previousVersion) then {
|
||||
profileNamespace setVariable ["ACE_VersionNumberString", _currentVersion];
|
||||
};
|
||||
|
||||
0 spawn COMPILE_FILE(scripts\Version\checkVersionNumber);
|
||||
|
||||
// ACE events
|
||||
"ACEg" addPublicVariableEventHandler { _this call FUNC(_handleNetEvent); };
|
||||
"ACEc" addPublicVariableEventHandler { _this call FUNC(_handleNetEvent); };
|
||||
@ -84,6 +82,7 @@ if(!isServer) then {
|
||||
["SEH_s", FUNC(_handleRequestSyncedEvent)] call FUNC(addEventHandler);
|
||||
[FUNC(syncedEventPFH), 0.5, []] call cba_fnc_addPerFrameHandler;
|
||||
|
||||
call FUNC(checkFiles);
|
||||
|
||||
/***************************************************************/
|
||||
/***************************************************************/
|
||||
@ -250,14 +249,3 @@ if(isMultiplayer && { time > 0 || isNull player } ) then {
|
||||
};
|
||||
}, 0, []] call cba_fnc_addPerFrameHandler;
|
||||
};
|
||||
|
||||
// check dlls
|
||||
{
|
||||
if (_x callExtension "version" == "") then {
|
||||
private "_errorMsg";
|
||||
_errorMsg = format ["Extension %1.dll not installed.", _x];
|
||||
|
||||
diag_log text format ["[ACE] ERROR: %1", _errorMsg];
|
||||
["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
|
||||
};
|
||||
} forEach getArray (configFile >> "ACE_Extensions" >> "extensions");
|
||||
|
@ -21,6 +21,7 @@ PREP(canInteract);
|
||||
PREP(canInteractWith);
|
||||
PREP(canUseWeapon);
|
||||
PREP(changeProjectileDirection);
|
||||
PREP(checkFiles);
|
||||
PREP(checkPBOs);
|
||||
PREP(claim);
|
||||
PREP(closeDialogIfTargetMoves);
|
||||
@ -182,6 +183,7 @@ PREP(unmuteUnit);
|
||||
PREP(useItem);
|
||||
PREP(useMagazine);
|
||||
PREP(waitAndExecute);
|
||||
PREP(waveHeightAt);
|
||||
|
||||
PREP(translateToWeaponSpace);
|
||||
PREP(translateToModelSpace);
|
||||
@ -311,6 +313,16 @@ if (hasInterface) then {
|
||||
}, 0, []] call cba_fnc_addPerFrameHandler;
|
||||
};
|
||||
|
||||
// Time handling
|
||||
ACE_time = diag_tickTime;
|
||||
ACE_realTime = diag_tickTime;
|
||||
ACE_virtualTime = diag_tickTime;
|
||||
ACE_diagTime = diag_tickTime;
|
||||
ACE_gameTime = time;
|
||||
|
||||
PREP(timePFH);
|
||||
[FUNC(timePFH), 0, []] call cba_fnc_addPerFrameHandler;
|
||||
|
||||
// Init toHex
|
||||
[0] call FUNC(toHex);
|
||||
|
||||
|
@ -101,7 +101,7 @@ class ACE_Settings {
|
||||
isClientSettable = 1;
|
||||
displayName = "$STR_ACE_Common_SettingFeedbackIconsName";
|
||||
description = "$STR_ACE_Common_SettingFeedbackIconsDesc";
|
||||
values[] = {"Hide", "Top right, downwards", "Top right, to the left", "Top left, downwards", "Top left, to the right"};
|
||||
values[] = {"$STR_ACE_Common_Hide", "$STR_ACE_Common_TopRightDown", "$STR_ACE_Common_TopRightLeft", "$STR_ACE_Common_TopLeftDown", "$STR_ACE_Common_TopLeftRight"};
|
||||
};
|
||||
class GVAR(SettingProgressBarLocation) {
|
||||
value = 0;
|
||||
@ -110,7 +110,7 @@ class ACE_Settings {
|
||||
isClientSettable = 1;
|
||||
displayName = "$STR_ACE_Common_SettingProgressbarLocationName";
|
||||
description = "$STR_ACE_Common_SettingProgressbarLocationDesc";
|
||||
values[] = {"Top", "Bottom"};
|
||||
values[] = {"$STR_ACE_Common_Top", "$STR_ACE_Common_Bottom"};
|
||||
};
|
||||
class GVAR(displayTextColor) {
|
||||
value[] = {0,0,0,0.1};
|
||||
|
85
addons/common/functions/fnc_checkFiles.sqf
Normal file
85
addons/common/functions/fnc_checkFiles.sqf
Normal file
@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
*
|
||||
* Compares version numbers of PBOs and DLLs.
|
||||
*
|
||||
* Argument:
|
||||
* None.
|
||||
*
|
||||
* Return value:
|
||||
* None.
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
///////////////
|
||||
// check addons
|
||||
///////////////
|
||||
private "_version";
|
||||
_version = getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr");
|
||||
|
||||
diag_log text format ["[ACE]: ACE is version %1.", _version];
|
||||
|
||||
private "_addons";
|
||||
_addons = activatedAddons;
|
||||
_addons = [_addons, {_this find "ace_" == 0}] call FUNC(filter);
|
||||
|
||||
{
|
||||
if (getText (configFile >> "CfgPatches" >> _x >> "versionStr") != _version) then {
|
||||
private "_errorMsg";
|
||||
_errorMsg = format ["File %1.pbo is outdated.", _x];
|
||||
|
||||
diag_log text format ["[ACE] ERROR: %1", _errorMsg];
|
||||
|
||||
if (hasInterface) then {
|
||||
["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
|
||||
};
|
||||
};
|
||||
} forEach _addons;
|
||||
|
||||
///////////////
|
||||
// check dlls
|
||||
///////////////
|
||||
{
|
||||
if (_x callExtension "version" == "") then {
|
||||
private "_errorMsg";
|
||||
_errorMsg = format ["Extension %1.dll not installed.", _x];
|
||||
|
||||
diag_log text format ["[ACE] ERROR: %1", _errorMsg];
|
||||
|
||||
if (hasInterface) then {
|
||||
["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
|
||||
};
|
||||
};
|
||||
} forEach getArray (configFile >> "ACE_Extensions" >> "extensions");
|
||||
|
||||
///////////////
|
||||
// check server version
|
||||
///////////////
|
||||
if (isMultiplayer) then {
|
||||
if (isServer) then {
|
||||
// send servers version of ACE to all clients
|
||||
GVAR(ServerVersion) = _version;
|
||||
publicVariable QGVAR(ServerVersion);
|
||||
} else {
|
||||
// clients have to wait for the variable
|
||||
[{
|
||||
if (isNil QGVAR(ServerVersion)) exitWith {};
|
||||
|
||||
private "_version";
|
||||
_version = _this select 0;
|
||||
|
||||
if (_version != GVAR(ServerVersion)) then {
|
||||
private "_errorMsg";
|
||||
_errorMsg = format ["Client/Server Version Mismatch. Server: %1, Client: %2.", GVAR(ServerVersion), _version];
|
||||
|
||||
diag_log text format ["[ACE] ERROR: %1", _errorMsg];
|
||||
|
||||
if (hasInterface) then {diag_log str "1";
|
||||
["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
|
||||
};
|
||||
};
|
||||
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
}, 1, _version] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
||||
};
|
@ -25,11 +25,11 @@ _checkAll = _this select 1;
|
||||
_whitelist = _this select 2;
|
||||
|
||||
if (isNil "_checkAll") then {
|
||||
_checkAll = false;
|
||||
_checkAll = false;
|
||||
};
|
||||
|
||||
if (isNil "_whitelist") then {
|
||||
_whitelist = "[]";
|
||||
_whitelist = "[]";
|
||||
};
|
||||
|
||||
_logic = "Logic" createVehicleLocal [0,0,0];
|
||||
|
@ -15,6 +15,21 @@
|
||||
disableSerialization;
|
||||
endLoadingScreen;
|
||||
|
||||
|
||||
// no message without player possible
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
// wait for display
|
||||
if (isNull (call BIS_fnc_displayMission)) exitWith {
|
||||
[{
|
||||
if (isNull (call BIS_fnc_displayMission)) exitWith {};
|
||||
|
||||
(_this select 0) call FUNC(errorMessage);
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
|
||||
}, 1, _this] call CBA_fnc_addPerFrameHandler;
|
||||
};
|
||||
|
||||
private ["_textHeader", "_textMessage", "_onOK", "_onCancel"];
|
||||
|
||||
_textHeader = _this select 0;
|
||||
|
@ -13,6 +13,8 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_parseConfigForSettings"];
|
||||
|
||||
GVAR(settings) = [];
|
||||
|
||||
_parseConfigForSettings = {
|
||||
|
@ -22,7 +22,7 @@ _checkAll = _logic getVariable ["CheckAll", false];
|
||||
_whitelist = call compile (_logic getVariable ["Whitelist", "[]"]);
|
||||
|
||||
if (isNil "_whitelist") then {
|
||||
_whitelist = [];
|
||||
_whitelist = [];
|
||||
};
|
||||
|
||||
_whitelist = [_whitelist, {toLower _this}] call FUNC(map);
|
||||
@ -31,67 +31,71 @@ ACE_Version_CheckAll = _checkAll;
|
||||
ACE_Version_Whitelist = _whitelist;
|
||||
|
||||
if (!isServer) then {
|
||||
[_mode, _checkAll, _whitelist] spawn {
|
||||
_mode = _this select 0;
|
||||
_checkAll = _this select 1;
|
||||
_whitelist = _this select 2;
|
||||
[_mode, _checkAll, _whitelist] spawn {
|
||||
_mode = _this select 0;
|
||||
_checkAll = _this select 1;
|
||||
_whitelist = _this select 2;
|
||||
|
||||
waitUntil {
|
||||
sleep 1;
|
||||
!isNil "ACE_Version_ClientErrors"
|
||||
waitUntil {
|
||||
sleep 1;
|
||||
!isNil "ACE_Version_ClientErrors"
|
||||
};
|
||||
|
||||
_missingAddon = ACE_Version_ClientErrors select 0;
|
||||
_missingAddonServer = ACE_Version_ClientErrors select 1;
|
||||
_oldVersionClient = ACE_Version_ClientErrors select 2;
|
||||
_oldVersionServer = ACE_Version_ClientErrors select 3;
|
||||
|
||||
// Display error message.
|
||||
if (_missingAddon || {_missingAddonServer} || {_oldVersionClient} || {_oldVersionServer}) then {
|
||||
_text = "[ACE] Version mismatch:<br/><br/>";
|
||||
_error = format ["ACE version mismatch: %1: ", profileName];
|
||||
|
||||
if (_missingAddon) then {
|
||||
_text = _text + "Detected missing addon on client<br/>";
|
||||
_error = _error + "Missing file(s); ";
|
||||
};
|
||||
if (_missingAddonServer) then {
|
||||
_text = _text + "Detected missing addon on server<br/>";
|
||||
_error = _error + "Additional file(s); ";
|
||||
};
|
||||
if (_oldVersionClient) then {
|
||||
_text = _text + "Detected old client version<br/>";
|
||||
_error = _error + "Older version; ";
|
||||
};
|
||||
if (_oldVersionServer) then {
|
||||
_text = _text + "Detected old server version<br/>";
|
||||
_error = _error + "Newer version; ";
|
||||
};
|
||||
|
||||
//[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
diag_log text _error;
|
||||
|
||||
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _text]];
|
||||
|
||||
_rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer;
|
||||
_rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true];
|
||||
|
||||
disableSerialization;
|
||||
_ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint";
|
||||
_ctrlHint ctrlSetStructuredText _text;
|
||||
|
||||
if (_mode == 0) then {
|
||||
sleep 10;
|
||||
_rscLayer cutFadeOut 0.2;
|
||||
};
|
||||
|
||||
if (_mode == 2) then {
|
||||
sleep 10;
|
||||
waitUntil {alive player};
|
||||
[player] call FUNC(adminKick);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
_missingAddon = ACE_Version_ClientErrors select 0;
|
||||
_missingAddonServer = ACE_Version_ClientErrors select 1;
|
||||
_oldVersionClient = ACE_Version_ClientErrors select 2;
|
||||
_oldVersionServer = ACE_Version_ClientErrors select 3;
|
||||
|
||||
// Display error message.
|
||||
if (_missingAddon || {_missingAddonServer} || {_oldVersionClient} || {_oldVersionServer}) then {
|
||||
_text = "[ACE] Version mismatch:<br/><br/>";
|
||||
_error = format ["ACE version mismatch: %1: ", profileName];
|
||||
|
||||
if (_missingAddon) then {
|
||||
_text = _text + "Detected missing addon on client<br/>";
|
||||
_error = _error + "Missing file(s); ";
|
||||
};
|
||||
if (_missingAddonServer) then {
|
||||
_text = _text + "Detected missing addon on server<br/>";
|
||||
_error = _error + "Additional file(s); ";
|
||||
};
|
||||
if (_oldVersionClient) then {
|
||||
_text = _text + "Detected old client version<br/>";
|
||||
_error = _error + "Older version; ";
|
||||
};
|
||||
if (_oldVersionServer) then {
|
||||
_text = _text + "Detected old server version<br/>";
|
||||
_error = _error + "Newer version; ";
|
||||
};
|
||||
|
||||
//[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
diag_log text _error;
|
||||
|
||||
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _text]];
|
||||
|
||||
_rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer;
|
||||
_rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true];
|
||||
|
||||
disableSerialization;
|
||||
_ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint";
|
||||
_ctrlHint ctrlSetStructuredText _text;
|
||||
|
||||
if (_mode == 0) then {
|
||||
sleep 10;
|
||||
_rscLayer cutFadeOut 0.2;
|
||||
};
|
||||
|
||||
if (_mode == 2) then {
|
||||
sleep 10;
|
||||
waitUntil {alive player};
|
||||
[player] call FUNC(adminKick);
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
diag_log text format ["[ACE]: Check-PBOs Module Initialized. Mode: %1.", _mode];
|
||||
|
||||
if (_checkAll) then {
|
||||
0 spawn COMPILE_FILE(scripts\Version\checkVersionNumber);
|
||||
};
|
||||
|
@ -17,7 +17,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_name","_value"];
|
||||
private ["_name","_value", "_force", "_settingData","_failed"];
|
||||
_name = _this select 0;
|
||||
_value = _this select 1;
|
||||
|
||||
|
@ -14,6 +14,8 @@
|
||||
|
||||
EXPLODE_1_PVT(_this,_optionEntry);
|
||||
|
||||
private ["_fnc_getValueWithType", "_value","_name", "_typeName", "_settingData"];
|
||||
|
||||
_fnc_getValueWithType = {
|
||||
EXPLODE_2_PVT(_this,_optionEntry,_typeName);
|
||||
|
||||
|
25
addons/common/functions/fnc_timePFH.sqf
Normal file
25
addons/common/functions/fnc_timePFH.sqf
Normal file
@ -0,0 +1,25 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
private["_lastTime", "_lastRealTime", "_lastVirtualTime", "_lastGameTime", "_delta"];
|
||||
|
||||
_lastRealTime = ACE_realTime;
|
||||
_lastGameTime = ACE_gameTime;
|
||||
|
||||
ACE_gameTime = time;
|
||||
ACE_diagTime = diag_tickTime;
|
||||
|
||||
_delta = ACE_diagTime - _lastRealTime;
|
||||
if(ACE_gameTime <= _lastGameTime) then {
|
||||
ACE_paused = true;
|
||||
// Game is paused or not running
|
||||
ACE_pausedTime = ACE_pausedTime + _delta;
|
||||
ACE_virtualPausedTime = ACE_pausedTime + (_delta * accTime);
|
||||
} else {
|
||||
ACE_paused = false;
|
||||
// Time is updating
|
||||
ACE_realTime = ACE_realTime + _delta;
|
||||
ACE_virtualTime = ACE_virtualTime + (_delta * accTime);
|
||||
ACE_time = ACE_virtualTime;
|
||||
};
|
||||
|
20
addons/common/functions/fnc_waveHeightAt.sqf
Normal file
20
addons/common/functions/fnc_waveHeightAt.sqf
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Author: jaynus
|
||||
*
|
||||
* Gets the wave height at a specific location. Uses a logic, so may be performance iffy
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Position ASL to get height at
|
||||
*
|
||||
* Return Value:
|
||||
* Wave height in meters
|
||||
*
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if(isNil QGVAR(waveHeightLogic)) then {
|
||||
GVAR(waveHeightLogic) = "Logic" createVehicleLocal [0,0,0];
|
||||
};
|
||||
GVAR(waveHeightLogic) setPosASL (_this select 0);
|
||||
|
||||
(((getPosASLW GVAR(waveHeightLogic)) select 2) - ((getPosASL GVAR(waveHeightLogic)) select 2))
|
@ -1,193 +1,156 @@
|
||||
// by commy2
|
||||
#include "script_component.hpp"
|
||||
|
||||
sleep 1; //wait for module
|
||||
|
||||
_files = [];
|
||||
|
||||
if (missionNamespace getVariable ["ACE_Version_CheckAll", false]) then {
|
||||
{
|
||||
if (toLower _x find "a3_" != 0 && {!(toLower _x in (missionNamespace getVariable ["ACE_Version_Whitelist", []]))}) then {
|
||||
_files pushBack _x;
|
||||
{
|
||||
if (_x find "a3_" != 0 && {_x find "ace_" != 0} && {!(toLower _x in (missionNamespace getVariable ["ACE_Version_Whitelist", []]))}) then {
|
||||
_files pushBack _x;
|
||||
};
|
||||
} forEach activatedAddons;
|
||||
} else {
|
||||
{
|
||||
if (toLower _x find "ace_" == 0) then {
|
||||
_files pushBack _x;
|
||||
};
|
||||
} forEach activatedAddons;
|
||||
};
|
||||
|
||||
_versionMain = parseNumber getText (configFile >> "CfgPatches" >> QUOTE(ADDON) >> "version");
|
||||
} forEach activatedAddons;
|
||||
|
||||
_versions = [];
|
||||
{
|
||||
_version = parseNumber getText (configFile >> "CfgPatches" >> _x >> "version");
|
||||
_versions set [_forEachIndex, _version];
|
||||
_version = parseNumber getText (configFile >> "CfgPatches" >> _x >> "version");
|
||||
_versions set [_forEachIndex, _version];
|
||||
} forEach _files;
|
||||
|
||||
_versionFull = getText (configFile >> "CfgPatches" >> QUOTE(ADDON) >> "versionStr");
|
||||
diag_log text format ["[ACE] Full Version Number: %1", _versionFull];
|
||||
|
||||
if (isServer) then {
|
||||
diag_log text format ["[ACE] Server: ACE_Common is Version %1.", _versionMain];
|
||||
|
||||
{
|
||||
if (toLower _x find "ace_" == 0) then {//
|
||||
_version = _versions select _forEachIndex;
|
||||
if (_version != _versionMain) then {
|
||||
diag_log text format ["[ACE] Server: %1 is Version %2.", _x, _version];
|
||||
};
|
||||
};
|
||||
} forEach _files;
|
||||
|
||||
ACE_Version_ServerVersions = [_files, _versions];
|
||||
publicVariable "ACE_Version_ServerVersions";
|
||||
ACE_Version_ServerVersions = [_files, _versions];
|
||||
publicVariable "ACE_Version_ServerVersions";
|
||||
} else {
|
||||
diag_log text format ["[ACE] Client: ACE_Common is Version %1.", _versionMain];
|
||||
|
||||
{
|
||||
if (toLower _x find "ace_" == 0) then {//
|
||||
_version = _versions select _forEachIndex;
|
||||
if (_version != _versionMain) then {
|
||||
diag_log text format ["[ACE] Client: %1 is Version %2.", _x, _version];
|
||||
};
|
||||
};
|
||||
} forEach _files;
|
||||
|
||||
ACE_Version_ClientVersions = [_files, _versions];
|
||||
ACE_Version_ClientVersions = [_files, _versions];
|
||||
};
|
||||
|
||||
// Begin client version check
|
||||
if (!isServer) then {
|
||||
// Wait for server to send the servers files and version numbers
|
||||
waitUntil {
|
||||
sleep 1;
|
||||
!isNil "ACE_Version_ClientVersions" && {!isNil "ACE_Version_ServerVersions"}
|
||||
};
|
||||
|
||||
_client = profileName;
|
||||
|
||||
_files = ACE_Version_ClientVersions select 0;
|
||||
_versions = ACE_Version_ClientVersions select 1;
|
||||
|
||||
_serverFiles = ACE_Version_ServerVersions select 0;
|
||||
_serverVersions = ACE_Version_ServerVersions select 1;
|
||||
|
||||
// Compare client and server files and versions
|
||||
_missingAddons = [];
|
||||
_oldVersionsClient = [];
|
||||
_oldVersionsServer = [];
|
||||
{
|
||||
_serverVersion = _serverVersions select _forEachIndex;
|
||||
|
||||
_index = _files find _x;
|
||||
if (_index == -1) then {
|
||||
if (_x != "ace_serverconfig") then {_missingAddons pushBack _x;};
|
||||
} else {
|
||||
|
||||
_clientVersion = _versions select _index;
|
||||
|
||||
if (_clientVersion < _serverVersion) then {
|
||||
_oldVersionsClient pushBack [_x, _clientVersion, _serverVersion];
|
||||
};
|
||||
|
||||
if (_clientVersion > _serverVersion) then {
|
||||
_oldVersionsServer pushBack [_x, _clientVersion, _serverVersion];
|
||||
};
|
||||
// Wait for server to send the servers files and version numbers
|
||||
waitUntil {
|
||||
sleep 1;
|
||||
!isNil "ACE_Version_ClientVersions" && {!isNil "ACE_Version_ServerVersions"}
|
||||
};
|
||||
} forEach _serverFiles;
|
||||
|
||||
// find client files which the server doesn't have
|
||||
_missingAddonsServer = [];
|
||||
{
|
||||
_index = _serverFiles find _x;
|
||||
if (_index == -1) then {
|
||||
_missingAddonsServer pushBack _x;
|
||||
}
|
||||
} forEach _files;
|
||||
_client = profileName;
|
||||
|
||||
// display and log error messages
|
||||
_fnc_cutComma = {
|
||||
_string = _this;
|
||||
_string = toArray _string;
|
||||
_files = ACE_Version_ClientVersions select 0;
|
||||
_versions = ACE_Version_ClientVersions select 1;
|
||||
|
||||
_count = count _string;
|
||||
_string set [_count - 2, toArray "." select 0];
|
||||
_string set [_count - 1, -1];
|
||||
_string = _string - [-1];
|
||||
_serverFiles = ACE_Version_ServerVersions select 0;
|
||||
_serverVersions = ACE_Version_ServerVersions select 1;
|
||||
|
||||
toString _string;
|
||||
};
|
||||
|
||||
_missingAddon = false;
|
||||
if (count _missingAddons > 0) then {
|
||||
_missingAddon = true;
|
||||
|
||||
_error = format ["[ACE] %1: ERROR missing addon(s): ", _client];
|
||||
// Compare client and server files and versions
|
||||
_missingAddons = [];
|
||||
_oldVersionsClient = [];
|
||||
_oldVersionsServer = [];
|
||||
{
|
||||
_error = _error + format ["%1, ", _x];
|
||||
_serverVersion = _serverVersions select _forEachIndex;
|
||||
|
||||
if (_forEachIndex > 9) exitWith {};//
|
||||
} forEach _missingAddons;
|
||||
_index = _files find _x;
|
||||
if (_index == -1) then {
|
||||
if (_x != "ace_server") then {_missingAddons pushBack _x;};
|
||||
} else {
|
||||
|
||||
_error = _error call _fnc_cutComma;
|
||||
_clientVersion = _versions select _index;
|
||||
|
||||
diag_log text _error;
|
||||
[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
};
|
||||
if (_clientVersion < _serverVersion) then {
|
||||
_oldVersionsClient pushBack [_x, _clientVersion, _serverVersion];
|
||||
};
|
||||
|
||||
_missingAddonServer = false;
|
||||
if (count _missingAddonsServer > 0) then {
|
||||
_missingAddonServer = true;
|
||||
if (_clientVersion > _serverVersion) then {
|
||||
_oldVersionsServer pushBack [_x, _clientVersion, _serverVersion];
|
||||
};
|
||||
};
|
||||
} forEach _serverFiles;
|
||||
|
||||
_error = format ["[ACE] %1: ERROR missing server addon(s): ", _client];
|
||||
// find client files which the server doesn't have
|
||||
_missingAddonsServer = [];
|
||||
{
|
||||
_error = _error + format ["%1, ", _x];
|
||||
_index = _serverFiles find _x;
|
||||
if (_index == -1) then {
|
||||
_missingAddonsServer pushBack _x;
|
||||
}
|
||||
} forEach _files;
|
||||
|
||||
if (_forEachIndex > 9) exitWith {};//
|
||||
} forEach _missingAddonsServer;
|
||||
// display and log error messages
|
||||
_fnc_cutComma = {
|
||||
_string = _this;
|
||||
_string = toArray _string;
|
||||
|
||||
_error = _error call _fnc_cutComma;
|
||||
_count = count _string;
|
||||
_string set [_count - 2, toArray "." select 0];
|
||||
_string set [_count - 1, -1];
|
||||
_string = _string - [-1];
|
||||
|
||||
diag_log text _error;
|
||||
[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
};
|
||||
toString _string;
|
||||
};
|
||||
|
||||
_oldVersionClient = false;
|
||||
if (count _oldVersionsClient > 0) then {
|
||||
_oldVersionClient = true;
|
||||
_missingAddon = false;
|
||||
if (count _missingAddons > 0) then {
|
||||
_missingAddon = true;
|
||||
|
||||
_error = format ["[ACE] %1: ERROR outdated addon(s): ", _client];
|
||||
{
|
||||
_error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2];
|
||||
_error = format ["[ACE] %1: ERROR missing addon(s): ", _client];
|
||||
{
|
||||
_error = _error + format ["%1, ", _x];
|
||||
|
||||
if (_forEachIndex > 9) exitWith {};//
|
||||
} forEach _oldVersionsClient;
|
||||
if (_forEachIndex > 9) exitWith {};//
|
||||
} forEach _missingAddons;
|
||||
|
||||
_error = _error call _fnc_cutComma;
|
||||
_error = _error call _fnc_cutComma;
|
||||
|
||||
diag_log text _error;
|
||||
[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
};
|
||||
diag_log text _error;
|
||||
[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
};
|
||||
|
||||
_oldVersionServer = false;
|
||||
if (count _oldVersionsServer > 0) then {
|
||||
_oldVersionServer = true;
|
||||
_missingAddonServer = false;
|
||||
if (count _missingAddonsServer > 0) then {
|
||||
_missingAddonServer = true;
|
||||
|
||||
_error = format ["[ACE] %1: ERROR outdated server addon(s): ", _client];
|
||||
{
|
||||
_error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2];
|
||||
_error = format ["[ACE] %1: ERROR missing server addon(s): ", _client];
|
||||
{
|
||||
_error = _error + format ["%1, ", _x];
|
||||
|
||||
if (_forEachIndex > 9) exitWith {};//
|
||||
} forEach _oldVersionsServer;
|
||||
if (_forEachIndex > 9) exitWith {};//
|
||||
} forEach _missingAddonsServer;
|
||||
|
||||
_error = _error call _fnc_cutComma;
|
||||
_error = _error call _fnc_cutComma;
|
||||
|
||||
diag_log text _error;
|
||||
[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
};
|
||||
diag_log text _error;
|
||||
[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
};
|
||||
|
||||
ACE_Version_ClientErrors = [_missingAddon, _missingAddonServer, _oldVersionClient, _oldVersionServer];
|
||||
_oldVersionClient = false;
|
||||
if (count _oldVersionsClient > 0) then {
|
||||
_oldVersionClient = true;
|
||||
|
||||
_error = format ["[ACE] %1: ERROR outdated addon(s): ", _client];
|
||||
{
|
||||
_error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2];
|
||||
|
||||
if (_forEachIndex > 9) exitWith {};//
|
||||
} forEach _oldVersionsClient;
|
||||
|
||||
_error = _error call _fnc_cutComma;
|
||||
|
||||
diag_log text _error;
|
||||
[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
};
|
||||
|
||||
_oldVersionServer = false;
|
||||
if (count _oldVersionsServer > 0) then {
|
||||
_oldVersionServer = true;
|
||||
|
||||
_error = format ["[ACE] %1: ERROR outdated server addon(s): ", _client];
|
||||
{
|
||||
_error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2];
|
||||
|
||||
if (_forEachIndex > 9) exitWith {};//
|
||||
} forEach _oldVersionsServer;
|
||||
|
||||
_error = _error call _fnc_cutComma;
|
||||
|
||||
diag_log text _error;
|
||||
[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
|
||||
};
|
||||
|
||||
ACE_Version_ClientErrors = [_missingAddon, _missingAddonServer, _oldVersionClient, _oldVersionServer];
|
||||
};
|
||||
|
@ -275,7 +275,7 @@
|
||||
<French>Désactiver menu commande</French>
|
||||
<Russian>Выключить командное меню</Russian>
|
||||
<Hungarian>Parancsnoki menü kikapcsolása</Hungarian>
|
||||
<Italian>Disabilita Menù di comando</Italian>
|
||||
<Italian>Disabilita menù di comando</Italian>
|
||||
<Portuguese>Desabilitar menu de comando</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Unknown">
|
||||
@ -308,11 +308,11 @@
|
||||
<Spanish>Aceptar peticiones</Spanish>
|
||||
<Polish>Akceptuj prośby</Polish>
|
||||
<Czech>Přijmout žádost</Czech>
|
||||
<Italian>Accetta Richieste</Italian>
|
||||
<French>Accepter requête</French>
|
||||
<Russian>Принять запросы</Russian>
|
||||
<Hungarian>Kérések elfogadása</Hungarian>
|
||||
<Portuguese>Aceitar Pedido</Portuguese>
|
||||
<Italian>Accetta la richiesta</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
|
||||
<English>Decline Requests</English>
|
||||
@ -320,11 +320,11 @@
|
||||
<Spanish>Rechazar peticiones</Spanish>
|
||||
<Polish>Ignoruj prośby</Polish>
|
||||
<Czech>Zamítnout žádost</Czech>
|
||||
<Italian>Rifiuta Richieste</Italian>
|
||||
<Russian>Отклонить запросы</Russian>
|
||||
<French>Rejeter requête</French>
|
||||
<Hungarian>Kérések elutasítása</Hungarian>
|
||||
<Portuguese>Rejeitar pedido</Portuguese>
|
||||
<Italian>Rifiuta la richiesta</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP">
|
||||
<English>Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
|
||||
@ -402,7 +402,7 @@
|
||||
<English>Hint Background color</English>
|
||||
<German>Hintergrundfarbe der Hinweise</German>
|
||||
<Spanish>Color de fondo de las notificaciones</Spanish>
|
||||
<Italian>Colore di sfondo dei Suggerimenti</Italian>
|
||||
<Italian>Colore di sfondo dei suggerimenti</Italian>
|
||||
<Russian>Цвет фона всплывающих подсказок</Russian>
|
||||
<Polish>Kolor tła powiadomień</Polish>
|
||||
<French>Notification: couleur de l'arrière plan</French>
|
||||
@ -414,7 +414,7 @@
|
||||
<English>The color of the background from the ACE hints.</English>
|
||||
<German>Die Hintergrundfarbe der ACE-Hinweise.</German>
|
||||
<Spanish>El color de fondo de las notificaciones del ACE</Spanish>
|
||||
<Italian>Il colore di sfondo dei suggerimenti dell'ACE.</Italian>
|
||||
<Italian>Il colore di sfondo dei suggerimenti di ACE.</Italian>
|
||||
<Russian>Цвет фона всплывающих подсказок АСЕ.</Russian>
|
||||
<Polish>Kolor tła dla powiadomień ACE</Polish>
|
||||
<French>Notification ACE: couleur de l'arrière plan</French>
|
||||
@ -426,7 +426,7 @@
|
||||
<English>Hint text font color</English>
|
||||
<German>Textfarbe der Hinweise</German>
|
||||
<Spanish>Color del texto de las notificaciones</Spanish>
|
||||
<Italian>Il colore del Testo dei Suggerimenti</Italian>
|
||||
<Italian>Il colore del testo dei suggerimenti</Italian>
|
||||
<Russian>Цвет шрифта всплывающих подсказок</Russian>
|
||||
<Polish>Kolor tekstu powiadomień</Polish>
|
||||
<French>Notification: couleur du texte</French>
|
||||
@ -438,7 +438,7 @@
|
||||
<English>The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified.</English>
|
||||
<German>Wähle die Textfarbe für ACE-Hinweise. Die gewählte Farbe wird als Standartfarbe der Hinweise angezeigt, wenn der Hinweis selbst keine spezifische Farbe hat. </German>
|
||||
<Spanish>El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado.</Spanish>
|
||||
<Italian>Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se il colore del testo non è specificato.</Italian>
|
||||
<Italian>Il colore del testo dei suggerimenti di ACE. Questo è il colore predefinito per tutto il testo mostrato dal sistema di suggerimenti di ACE quando il colore del testo non ha altro colore specificato.</Italian>
|
||||
<Russian>Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок.</Russian>
|
||||
<Polish>Kolor tekstu dla powiadomień ACE. Ten kolor jest domyślnym dla wszystkich tekstów wyświetlanych poprzez System Powiadomień ACE, jeżeli dla powiadomienia nie określono innego koloru.</Polish>
|
||||
<French>Notification ACE: couleur du texte. C'est la couleur par défaut de tout texte affiché dans les notifications ACE, si aucune couleur n'est spécifiée pour les notifications</French>
|
||||
@ -470,5 +470,57 @@
|
||||
<French>Une banane est un fruit qui, d'un point de vue botanique, fait partie du groupe des baies. Produite par plusieurs sortes de grandes plantes à fleurs herbacées du type Musa.</French>
|
||||
<Portuguese>A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa.</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_DisplayName">
|
||||
<English>Check PBOs</English>
|
||||
<Polish>Sprawdzaj PBO</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Description">
|
||||
<English></English>
|
||||
<Polish>Sprawdzaj spójność addonów z serwerem</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
|
||||
<English>Action</English>
|
||||
<Polish>Akcja</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Action_Description">
|
||||
<English>What to do with people who do not have the right PBOs?</English>
|
||||
<Polish>Co zrobić z graczami, którzy nie mają właściwych PBO?</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce">
|
||||
<English>Warn once</English>
|
||||
<Polish>Ostrzeż raz</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm">
|
||||
<English>Warn (permanent)</English>
|
||||
<Polish>Ostrzeżenie (permanentne)</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Action_Kick">
|
||||
<English>Kick</English>
|
||||
<Polish>Kick</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_DisplayName">
|
||||
<English>Check all addons</English>
|
||||
<Polish>Sprawdź wsz. addony</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_Description">
|
||||
<English>Check all addons instead of only those of ACE?</English>
|
||||
<Polish>Sprawdzaj wszystkie addony czy tylko te z ACE?</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName">
|
||||
<English>Whitelist</English>
|
||||
<Polish>Biała lista</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_Description">
|
||||
<English>What addons are allowed regardless?</English>
|
||||
<Polish>Jakie addony są dozwolone?</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_LSDVehicles_DisplayName">
|
||||
<English>LSD Vehicles</English>
|
||||
<Polish>Pojazdy LSD</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_LSDVehicles_Description">
|
||||
<English>Adds LSD effect to synchronized vehicle</English>
|
||||
<Polish>Dodaje efekt LSD pod zsynchronizowany pojazd</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -79,7 +79,7 @@ _holderMagazinesStart = magazinesAmmoCargo _holder;
|
||||
|
||||
{
|
||||
EXPLODE_2_PVT(_x,_xClassname,_xAmmo);
|
||||
if ((_xClassname in _listOfItemsToRemove) && {!(_xClassname in UNIQUE_MAGAZINES)}) then {
|
||||
if ((_xClassname in _listOfItemsToRemove) && {(getNumber (configFile >> "CfgMagazines" >> _xClassname >> "ACE_isUnique")) == 0}) then {
|
||||
_holder addMagazineAmmoCargo [_xClassname, 1, _xAmmo];
|
||||
_target removeMagazine _xClassname;
|
||||
};
|
||||
@ -89,7 +89,7 @@ _targetMagazinesEnd = magazinesAmmo _target;
|
||||
_holderMagazinesEnd = magazinesAmmoCargo _holder;
|
||||
|
||||
//Verify Mags dropped from unit:
|
||||
if ( ({((_x select 0) in _listOfItemsToRemove) && {!((_x select 0) in UNIQUE_MAGAZINES)}} count _targetMagazinesEnd) != 0) exitWith {
|
||||
if (({((_x select 0) in _listOfItemsToRemove) && {(getNumber (configFile >> "CfgMagazines" >> (_x select 0) >> "ACE_isUnique")) == 0}} count _targetMagazinesEnd) != 0) exitWith {
|
||||
_holder setVariable [QGVAR(holderInUse), false];
|
||||
[_caller, _target, "Debug: Didn't Remove Magazines"] call FUNC(eventTargetFinish);
|
||||
};
|
||||
@ -102,7 +102,7 @@ if (!([_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holde
|
||||
|
||||
//Remove Items, Assigned Items and NVG
|
||||
_holderItemsStart = getitemCargo _holder;
|
||||
_targetItemsStart = (assignedItems _target) + (items _target);
|
||||
_targetItemsStart = (assignedItems _target) + (items _target) - (weapons _target);
|
||||
if ((headgear _target) != "") then {_targetItemsStart pushBack (headgear _target);};
|
||||
if ((goggles _target) != "") then {_targetItemsStart pushBack (goggles _target);};
|
||||
|
||||
@ -132,7 +132,7 @@ _addToCrateCount = [];
|
||||
} forEach _addToCrateClassnames;
|
||||
|
||||
_holderItemsEnd = getitemCargo _holder;
|
||||
_targetItemsEnd = (assignedItems _target) + (items _target);
|
||||
_targetItemsEnd = (assignedItems _target) + (items _target) - (weapons _target);
|
||||
if ((headgear _target) != "") then {_targetItemsEnd pushBack (headgear _target);};
|
||||
if ((goggles _target) != "") then {_targetItemsEnd pushBack (goggles _target);};
|
||||
|
||||
@ -146,6 +146,16 @@ if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select
|
||||
[_caller, _target, "Debug: Items Not Added to Holder"] call FUNC(eventTargetFinish);
|
||||
};
|
||||
|
||||
//Script drop uniforms/vest if empty
|
||||
if (((uniform _target) != "") && {(uniform _target) in _listOfItemsToRemove} && {(uniformItems _target) isEqualTo []}) then {
|
||||
_holder addItemCargoGlobal [(uniform _target), 1];
|
||||
removeUniform _target;
|
||||
};
|
||||
if (((vest _target) != "") && {(vest _target) in _listOfItemsToRemove} && {(vestItems _target) isEqualTo []}) then {
|
||||
_holder addItemCargoGlobal [(vest _target), 1];
|
||||
removeVest _target;
|
||||
};
|
||||
|
||||
|
||||
//If holder is still empty, it will be 'garbage collected' while we wait for the drop 'action' to take place
|
||||
//So add a dummy item and just remove at the end
|
||||
|
@ -19,7 +19,7 @@ PARAMS_1(_target);
|
||||
|
||||
private ["_allItems", "_classnamesCount", "_index", "_uniqueClassnames"];
|
||||
|
||||
_allItems = ((weapons _target) + (magazines _target) + (items _target) + (assignedItems _target));
|
||||
_allItems = (((items _target) + (assignedItems _target)) - (weapons _target)) + (weapons _target) + (magazines _target);
|
||||
|
||||
if ((backpack _target) != "") then {
|
||||
_allItems pushBack (backpack _target);
|
||||
|
@ -28,7 +28,7 @@ private ["_classname", "_count", "_displayName", "_picture"];
|
||||
_classname = _x;
|
||||
_count = (_itemsCountArray select 1) select _forEachIndex;
|
||||
|
||||
if (_classname != DUMMY_ITEM) then { //Don't show the dummy potato
|
||||
if ((_classname != DUMMY_ITEM) && {_classname != "ACE_FakePrimaryWeapon"}) then { //Don't show the dummy potato or fake weapon
|
||||
|
||||
switch (true) do {
|
||||
case (isClass (configFile >> "CfgWeapons" >> _classname)): {
|
||||
@ -53,8 +53,8 @@ private ["_classname", "_count", "_displayName", "_picture"];
|
||||
};
|
||||
|
||||
_listBoxCtrl lbAdd format ["%1", _displayName];
|
||||
_listBoxCtrl lbSetData [_forEachIndex, _classname];
|
||||
_listBoxCtrl lbSetPicture [_forEachIndex, _picture];
|
||||
_listBoxCtrl lbSetTextRight [_forEachIndex, str _count];
|
||||
_listBoxCtrl lbSetData [((lbSize _listBoxCtrl) - 1), _classname];
|
||||
_listBoxCtrl lbSetPicture [((lbSize _listBoxCtrl) - 1), _picture];
|
||||
_listBoxCtrl lbSetTextRight [((lbSize _listBoxCtrl) - 1), str _count];
|
||||
};
|
||||
} forEach (_itemsCountArray select 0);
|
||||
|
@ -13,4 +13,3 @@
|
||||
|
||||
#define DISARM_CONTAINER "GroundWeaponHolder"
|
||||
#define DUMMY_ITEM "ACE_DebugPotato"
|
||||
#define UNIQUE_MAGAZINES ["ACE_key_customKeyMagazine"]
|
@ -10,7 +10,7 @@
|
||||
<Spanish>Lanzador utilizado</Spanish>
|
||||
<Hungarian>Elhasznált kilövőcső</Hungarian>
|
||||
<Russian>Отстрелянная труба</Russian>
|
||||
<Italian>Tubo utilizzato</Italian>
|
||||
<Italian>Tubo usato</Italian>
|
||||
<Portuguese>Tubo utilizado</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Disposable_UsedTubeDescription">
|
||||
@ -22,7 +22,7 @@
|
||||
<Spanish>Lanzador desechable utilizado</Spanish>
|
||||
<Hungarian>Elhasznált eldobható rakétavető</Hungarian>
|
||||
<Russian>Отстрелянная одноразовая пусковая установка</Russian>
|
||||
<Italian>Lanciarazzi monouso utilizzato</Italian>
|
||||
<Italian>Lanciarazzi monouso già utilizzato</Italian>
|
||||
<Portuguese>Lança foguetes descartável utilizado</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Disposable_PreloadedMissileDummy">
|
||||
@ -34,7 +34,7 @@
|
||||
<Spanish>Precargado misil inerte</Spanish>
|
||||
<Hungarian>Előtöltött műrakéta</Hungarian>
|
||||
<Russian>Предзаряженная ракетная болванка</Russian>
|
||||
<Italian>Missile stupido precaricato</Italian>
|
||||
<Italian>Missile inerte precaricato</Italian>
|
||||
<Portuguese>Míssel inerte pré-carregado</Portuguese>
|
||||
</Key>
|
||||
</Package>
|
||||
|
@ -14,7 +14,8 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_object", "_enableCarry", "_position", "_direction"];
|
||||
private ["_carryAction", "_dropAction", "_object", "_enableCarry", "_position", "_direction"];
|
||||
//IGNORE_PRIVATE_WARNING("_player", "_target");
|
||||
|
||||
_this resize 4;
|
||||
|
||||
|
@ -14,7 +14,8 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_object", "_enableDrag", "_position", "_direction"];
|
||||
private ["_dragAction", "_dropAction", "_object", "_enableDrag", "_position", "_direction"];
|
||||
//IGNORE_PRIVATE_WARNING("_player", "_target");
|
||||
|
||||
_this resize 4;
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
||||
<Polish>Przedmiot jest zbyt ciężki</Polish>
|
||||
<French>Objet trop lourd</French>
|
||||
<Portuguese>Objeto muito pesado</Portuguese>
|
||||
<Italian>Non è possibile trascinare l'oggetto a causa del suo peso</Italian>
|
||||
<Italian>L'oggetto pesa troppo</Italian>
|
||||
<Russian>Предмет слишком тяжёлый</Russian>
|
||||
<Czech>Moc težké</Czech>
|
||||
<Hungarian>Az objektum túl nehéz</Hungarian>
|
||||
@ -45,8 +45,8 @@
|
||||
<French>Porter</French>
|
||||
<Czech>Nést</Czech>
|
||||
<Portuguese>Carregar</Portuguese>
|
||||
<Italian>Trascina</Italian>
|
||||
<Hungarian>Felvevés</Hungarian>
|
||||
<Italian>Trasporta</Italian>
|
||||
<Russian>Нести</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
|
@ -1,44 +1,30 @@
|
||||
class Module_F;
|
||||
class Logic;
|
||||
class Module_F: Logic {
|
||||
class ModuleDescription {};
|
||||
};
|
||||
class ACE_ModuleExplosive: Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "Explosive System";
|
||||
displayName = "$STR_ACE_Explosive_Module_DisplayName";
|
||||
function = QUOTE(FUNC(module));
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = PATHTOF(UI\Icon_Module_Explosives_ca.paa);
|
||||
class Arguments {
|
||||
class RequireSpecialist {
|
||||
displayName = "Require specialists?";
|
||||
description = "Require explosive specialists to disable explosives? Default: No";
|
||||
displayName = "$STR_ACE_Explosive_RequireSpecialist_DisplayName";
|
||||
description = "$STR_ACE_Explosive_RequireSpecialist_Description";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class Yes {
|
||||
name = "Yes";
|
||||
value = 1;
|
||||
};
|
||||
class No {
|
||||
default = 1;
|
||||
name = "No";
|
||||
value = 0;
|
||||
};
|
||||
};
|
||||
defaultValue = 0;
|
||||
};
|
||||
class PunishNonSpecialists {
|
||||
displayName = "Punish non-specialists?";
|
||||
description = "Increase the time it takes to complete actions for non-specialists? Default: Yes";
|
||||
displayName = "$STR_ACE_Explosive_PunishNonSpecialists_DisplayName";
|
||||
description = "$STR_ACE_Explosive_PunishNonSpecialists_Description";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class Yes {
|
||||
default = 1;
|
||||
name = "Yes";
|
||||
value = 1;
|
||||
};
|
||||
class No {
|
||||
name = "No";
|
||||
value = 0;
|
||||
};
|
||||
};
|
||||
defaultValue = 1;
|
||||
};
|
||||
};
|
||||
class ModuleDescription: ModuleDescription {
|
||||
description = "$STR_ACE_Explosive_Module_Description";
|
||||
};
|
||||
};
|
@ -368,7 +368,7 @@
|
||||
<Polish>Wybierz zapalnik</Polish>
|
||||
<French>Sélectionner une mise à feu</French>
|
||||
<Czech>Zvolit Detonátor</Czech>
|
||||
<Italian>Seleziona un Attivatore</Italian>
|
||||
<Italian>Seleziona un attivatore</Italian>
|
||||
<Hungarian>Gyújtóeszköz kiválasztása</Hungarian>
|
||||
<Portuguese>Selecionar um Gatilho</Portuguese>
|
||||
<Russian>Выберите детонатор</Russian>
|
||||
@ -392,7 +392,7 @@
|
||||
<German>Druckplatte</German>
|
||||
<French>Plaque de pression</French>
|
||||
<Czech>Nášlapná nástraha</Czech>
|
||||
<Italian>Piastra a Pressione</Italian>
|
||||
<Italian>Piastra a pressione</Italian>
|
||||
<Hungarian>Nyomólap</Hungarian>
|
||||
<Portuguese>Placa de pressão</Portuguese>
|
||||
<Russian>Нажимная плита</Russian>
|
||||
@ -404,7 +404,7 @@
|
||||
<German>Stolperdraht</German>
|
||||
<French>Fil de détente</French>
|
||||
<Czech>Nástražný drát</Czech>
|
||||
<Italian>Filo a Inciampo</Italian>
|
||||
<Italian>Filo a inciampo</Italian>
|
||||
<Hungarian>Botlódrót</Hungarian>
|
||||
<Portuguese>Linha de tração</Portuguese>
|
||||
<Russian>Растяжка</Russian>
|
||||
@ -440,7 +440,7 @@
|
||||
<German>Infrarotsensor (Seitenangriff)</German>
|
||||
<French>Capteur IR (de flanc)</French>
|
||||
<Czech>IR Značkovač (Výbuch stranou)</Czech>
|
||||
<Italian>Sensore IR (Attacco laterale)</Italian>
|
||||
<Italian>Sensore IR (attacco laterale)</Italian>
|
||||
<Hungarian>Infravörös szenzor (Side Attack)</Hungarian>
|
||||
<Portuguese>Sensor infravermelho (ataque lateral)</Portuguese>
|
||||
<Russian>ИК сенсор (детонация вбок)</Russian>
|
||||
@ -452,7 +452,7 @@
|
||||
<German>Magnetfeldsensor (Bodenangriff)</German>
|
||||
<French>Capteur magnétique (par le bas)</French>
|
||||
<Czech>Magnetický Senzor (Výbuch ze spoda)</Czech>
|
||||
<Italian>Sensore Magnetico di Prossimità (Attacco inferiore)</Italian>
|
||||
<Italian>Sensore Magnetico di Prossimità (attacco inferiore)</Italian>
|
||||
<Hungarian>Mágneses mező érzékelő (Bottom Attack)</Hungarian>
|
||||
<Portuguese>Influência magnética (ataque inferior)</Portuguese>
|
||||
<Russian>Магнитный сенсор (детонация вверх)</Russian>
|
||||
@ -462,7 +462,7 @@
|
||||
<German>Keine Sprengladungen auf diesem Auslöser.</German>
|
||||
<Spanish>Ningún explosivo en el detonador.</Spanish>
|
||||
<French>Pas d'explosif à mettre à feu.</French>
|
||||
<Italian>Nessun esplosivo sul sensore.</Italian>
|
||||
<Italian>Nessun esplosivo</Italian>
|
||||
<Czech>Žádná výbušnina k odpálení.</Czech>
|
||||
<Hungarian>Nincs robbanóanyag a gyújtóeszközhöz kötve.</Hungarian>
|
||||
<Polish>Brak ładunków na zapalnik.</Polish>
|
||||
@ -491,7 +491,7 @@
|
||||
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
|
||||
<Portuguese>Usado para detonar remotamente o explosivo quando solto.</Portuguese>
|
||||
<Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian>
|
||||
<Italian>Usato per attivare esplosivi al momento del rilascio</Italian>
|
||||
<Italian>Usato per attivare a distanza esplosivi al momento del rilascio</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_Pickup">
|
||||
<English>Pick up</English>
|
||||
@ -505,5 +505,29 @@
|
||||
<Italian>Raccogli</Italian>
|
||||
<Portuguese>Pegar</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosive_Module_DisplayName">
|
||||
<English>Explosive System</English>
|
||||
<Polish>System ładunków wybuchowych</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosive_RequireSpecialist_DisplayName">
|
||||
<English>Require specialists?</English>
|
||||
<Polish>Wymagaj specjalistów?</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosive_RequireSpecialist_Description">
|
||||
<English>Require explosive specialists to disable explosives? Default: No</English>
|
||||
<Polish>Wymagać saperów do rozbrajania ładunków wybuchowych? Domyślnie: Nie</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosive_PunishNonSpecialists_DisplayName">
|
||||
<English>Punish non-specialists?</English>
|
||||
<Polish>Karaj nie-specjalistów?</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosive_PunishNonSpecialists_Description">
|
||||
<English>Increase the time it takes to complete actions for non-specialists? Default: Yes</English>
|
||||
<Polish>Zwiększyć ilość wymaganego czasu do ukończenia akcji dla nie-specjalistów? Domyślnie: Tak</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosive_Module_Description">
|
||||
<English></English>
|
||||
<Polish>Moduł ten pozwala dostosować opcje związane z ładunkami wybuchowymi, ich podkładaniem oraz rozbrajaniem.</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_vehicle", "_weapon", "_ammo", "_magazine", "_projectile","_velocityCorrection"];
|
||||
private ["_vehicle", "_weapon", "_ammo", "_magazine", "_projectile", "_sumVelocity"];
|
||||
|
||||
_vehicle = _this select 0;
|
||||
_weapon = _this select 1;
|
||||
@ -43,12 +43,8 @@ _offset = 0;
|
||||
};
|
||||
} forEach _FCSMagazines;
|
||||
|
||||
// Correct velocity for weapons that have initVelocity
|
||||
// @todo: Take into account negative initVelocities
|
||||
_velocityCorrection = (vectorMagnitude velocity _projectile) -
|
||||
getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed");
|
||||
|
||||
[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, -_velocityCorrection] call EFUNC(common,changeProjectileDirection);
|
||||
[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, 0] call EFUNC(common,changeProjectileDirection);
|
||||
|
||||
// Remove the platform velocity
|
||||
if( (vectorMagnitude velocity _vehicle) > 2) then {
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_vehicle", "_turret", "_turretConfig", "_distance", "_magazines", "_showHint", "_playSound"];
|
||||
private ["_vehicle", "_turret", "_turretConfig", "_distance", "_weapons", "_magazines", "_showHint", "_playSound"];
|
||||
|
||||
_vehicle = _this select 0;
|
||||
_turret = _this select 1;
|
||||
@ -21,6 +21,7 @@ _turretConfig = [configFile >> "CfgVehicles" >> typeOf _vehicle, _turret] call E
|
||||
|
||||
_distance = call FUNC(getRange);
|
||||
|
||||
_weapons = _vehicle weaponsTurret _turret;
|
||||
_magazines = _vehicle magazinesTurret _turret;
|
||||
|
||||
if (_distance == 0) then {
|
||||
@ -31,9 +32,9 @@ if (_distance == 0) then {
|
||||
] call EFUNC(common,getTargetDistance); // maximum distance: 5000m, 5m precision
|
||||
};
|
||||
|
||||
private ["_weaponDirection", "_angleTarget"];
|
||||
|
||||
_weaponDirection = _vehicle weaponDirection (_vehicle currentWeaponTurret _turret); // @todo doesn't work for sub turrets
|
||||
private ["_weapon", "_weaponDirection", "_angleTarget"];
|
||||
_weapon = _vehicle currentWeaponTurret _turret;
|
||||
_weaponDirection = _vehicle weaponDirection _weapon; // @todo doesn't work for sub turrets
|
||||
|
||||
if (_turret isEqualTo ([_vehicle] call EFUNC(common,getTurretCommander))) then {
|
||||
_weaponDirection = eyeDirection _vehicle;
|
||||
@ -55,7 +56,7 @@ if (!(isNil QGVAR(backgroundCalculation)) and {!(scriptDone GVAR(backgroundCalcu
|
||||
terminate GVAR(backgroundCalculation);
|
||||
};
|
||||
|
||||
private "_movingAzimuth";
|
||||
private ["_movingAzimuth", "_posTarget", "_velocityTarget"];
|
||||
|
||||
// MOVING TARGETS
|
||||
_movingAzimuth = 0;
|
||||
@ -72,7 +73,7 @@ if (time - GVAR(time) > 1 and GVAR(time) != -1 and count _this < 3) then {
|
||||
((_posTarget select 2) - (GVAR(position) select 2)) / (time - GVAR(time))
|
||||
];
|
||||
|
||||
private ["_magazineType", "_ammoType", "_initSpeed", "_airFriction", "_timeToLive", "_simulationStep"];
|
||||
private ["_magazineType", "_ammoType", "_initSpeed", "_airFriction", "_timeToLive", "_simulationStep", "_initSpeedCoef", "_velocityMagnitude"];
|
||||
|
||||
// estimate time to target
|
||||
_magazineType = _vehicle currentMagazineTurret _turret;
|
||||
@ -82,6 +83,14 @@ if (time - GVAR(time) > 1 and GVAR(time) != -1 and count _this < 3) then {
|
||||
_timeToLive = getNumber (configFile >> "CfgAmmo" >> _ammoType >> "timeToLive");
|
||||
_simulationStep = getNumber (configFile >> "CfgAmmo" >> _ammoType >> "simulationStep");
|
||||
|
||||
_initSpeedCoef = getNumber(configFile >> "CfgWeapons" >> _weapon >> "initSpeed");
|
||||
if (_initSpeedCoef < 0) then {
|
||||
_initSpeed = _initSpeed * -_initSpeedCoef;
|
||||
};
|
||||
if (_initSpeedCoef > 0) then {
|
||||
_initSpeed = _initSpeedCoef;
|
||||
};
|
||||
|
||||
if (_simulationStep != 0) then {
|
||||
private ["_posX", "_velocityX", "_velocityY", "_timeToTarget"];
|
||||
|
||||
@ -138,21 +147,43 @@ _FCSMagazines = [];
|
||||
_FCSElevation = [];
|
||||
|
||||
{
|
||||
private "_ammoType";
|
||||
|
||||
_ammoType = getText (configFile >> "CfgMagazines" >> _x >> "ammo");
|
||||
private ["_magazine", "_ammoType"];
|
||||
_magazine = _x;
|
||||
_ammoType = getText (configFile >> "CfgMagazines" >> _magazine >> "ammo");
|
||||
|
||||
if !(getText (configFile >> "CfgAmmo" >> _ammoType >> "simulation") == "shotMissile") then {
|
||||
private ["_maxElev", "_initSpeed", "_airFriction", "_offset"];
|
||||
|
||||
_maxElev = getNumber (_turretConfig >> "maxElev");
|
||||
_initSpeed = getNumber (configFile >> "CfgMagazines" >> _x >> "initSpeed");
|
||||
_initSpeed = getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed");
|
||||
_airFriction = getNumber (configFile >> "CfgAmmo" >> _ammoType >> "airFriction");
|
||||
|
||||
{
|
||||
private ["_weapon", "_muzzles", "_weaponMagazines", "_muzzleMagazines"];
|
||||
_weapon = _x;
|
||||
_muzzles = getArray (configFile >> "CfgWeapons" >> _weapon >> "muzzles");
|
||||
_weaponMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines");
|
||||
{
|
||||
if (_x != "this") then {
|
||||
_muzzleMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines");
|
||||
_weaponMagazines append _muzzleMagazines;
|
||||
};
|
||||
} forEach _muzzles;
|
||||
if (_magazine in _weaponMagazines) exitWith {
|
||||
_initSpeedCoef = getNumber(configFile >> "CfgWeapons" >> _weapon >> "initSpeed");
|
||||
if (_initSpeedCoef < 0) then {
|
||||
_initSpeed = _initSpeed * -_initSpeedCoef;
|
||||
};
|
||||
if (_initSpeedCoef > 0) then {
|
||||
_initSpeed = _initSpeedCoef;
|
||||
};
|
||||
};
|
||||
} forEach _weapons;
|
||||
|
||||
_offset = "ace_fcs" callExtension format ["%1,%2,%3,%4", _initSpeed, _airFriction, _angleTarget, _distance];
|
||||
_offset = parseNumber _offset;
|
||||
|
||||
_FCSMagazines = _FCSMagazines + [_x];
|
||||
_FCSMagazines = _FCSMagazines + [_magazine];
|
||||
_FCSElevation = _FCSElevation + [_offset];
|
||||
};
|
||||
} forEach _magazines;
|
||||
|
@ -68,7 +68,7 @@
|
||||
<Italian>Soppressore di fiamma (.338)</Italian>
|
||||
<Portuguese>Supressor de Clarão (.338)</Portuguese>
|
||||
<Polish>Tłumik płomienia (.338)</Polish>
|
||||
<Czech>Tlumič záblesku (.338)</Czech>
|
||||
<Czech>Tlumič plamene (.338)</Czech>
|
||||
<French>Cache-flamme (.338)</French>
|
||||
<Russian>Пламегаситель (.338)</Russian>
|
||||
<Spanish>Bocacha (.338)</Spanish>
|
||||
@ -80,7 +80,7 @@
|
||||
<Italian>Soppressore di fiamma (9.3mm)</Italian>
|
||||
<Portuguese>Supressor de Clarão (9,3mm)</Portuguese>
|
||||
<Polish>Tłumik płomienia (9,3 mm)</Polish>
|
||||
<Czech>Tlumič záblesku (9,3 mm)</Czech>
|
||||
<Czech>Tlumič plamene (9,3 mm)</Czech>
|
||||
<French>Cache-flamme (9,3 mm)</French>
|
||||
<Russian>Пламегаситель (9,3 мм)</Russian>
|
||||
<Spanish>Bocacha (9,3 mm)</Spanish>
|
||||
|
@ -10,6 +10,8 @@ class CfgAmmo {
|
||||
//};
|
||||
class Bo_GBU12_LGB;
|
||||
class ACE_GBU12 : Bo_GBU12_LGB {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
GVAR(metal) = 140000;
|
||||
GVAR(charge) = 87000;
|
||||
@ -23,6 +25,8 @@ class CfgAmmo {
|
||||
class GrenadeBase;
|
||||
class Grenade;
|
||||
class GrenadeHand: Grenade {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(skip) = 0;
|
||||
GVAR(force) = 1;
|
||||
// This is a good high-drag frag type for grenades.
|
||||
@ -46,6 +50,8 @@ class CfgAmmo {
|
||||
class RocketBase;
|
||||
class R_Hydra_HE: RocketBase {
|
||||
// Source: http://fas.org/man/dod-101/sys/missile/hydra-70.htm
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 3850;
|
||||
GVAR(charge) = 1040;
|
||||
@ -66,6 +72,8 @@ class CfgAmmo {
|
||||
|
||||
class BombCore;
|
||||
class Bo_Mk82: BombCore {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
GVAR(metal) = 140000;
|
||||
GVAR(charge) = 87000;
|
||||
@ -75,6 +83,8 @@ class CfgAmmo {
|
||||
|
||||
class G_40mm_HE: GrenadeBase {
|
||||
// Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M441
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||
GVAR(metal) = 200;
|
||||
GVAR(charge) = 32;
|
||||
@ -83,6 +93,8 @@ class CfgAmmo {
|
||||
};
|
||||
class G_40mm_HEDP: G_40mm_HE {
|
||||
// Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M433
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||
GVAR(metal) = 200;
|
||||
GVAR(charge) = 45;
|
||||
@ -107,6 +119,8 @@ class CfgAmmo {
|
||||
class Sh_125mm_HEAT;
|
||||
class Sh_155mm_AMOS: ShellBase {
|
||||
// Source: http://www.globalsecurity.org/military/systems/munitions/m795.htm
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
GVAR(metal) = 36000;
|
||||
GVAR(charge) = 9979;
|
||||
@ -115,6 +129,8 @@ class CfgAmmo {
|
||||
};
|
||||
class Sh_82mm_AMOS : Sh_155mm_AMOS {
|
||||
// Source: http://www.arsenal-bg.com/defense_police/mortar_bombs_82mm.htm
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 3200;
|
||||
GVAR(charge) = 420;
|
||||
@ -122,6 +138,8 @@ class CfgAmmo {
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class ModuleOrdnanceMortar_F_Ammo: Sh_82mm_AMOS {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 800;
|
||||
GVAR(charge) = 4200;
|
||||
@ -129,6 +147,8 @@ class CfgAmmo {
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class Sh_105mm_HEAT_MP : Sh_125mm_HEAT {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 11400;
|
||||
GVAR(charge) = 7100;
|
||||
@ -136,6 +156,8 @@ class CfgAmmo {
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class Sh_120mm_HE : ShellBase {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 23000;
|
||||
GVAR(charge) = 3148;
|
||||
@ -143,6 +165,8 @@ class CfgAmmo {
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class Sh_125mm_HE: Sh_120mm_HE {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 16000;
|
||||
GVAR(charge) = 3200;
|
||||
@ -150,6 +174,8 @@ class CfgAmmo {
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class ModuleOrdnanceHowitzer_F_ammo: Sh_155mm_AMOS {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
GVAR(metal) = 1950;
|
||||
GVAR(charge) = 15800;
|
||||
@ -175,6 +201,8 @@ class CfgAmmo {
|
||||
class MissileBase;
|
||||
class Missile_AGM_02_F : MissileBase {
|
||||
// Source: http://fas.org/man/dod-101/sys/smart/agm-65.htm
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 56250;
|
||||
GVAR(charge) = 39000;
|
||||
@ -183,6 +211,8 @@ class CfgAmmo {
|
||||
};
|
||||
class M_Hellfire_AT: MissileBase {
|
||||
// Source: http://www.designation-systems.net/dusrm/m-114.html
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 8000;
|
||||
GVAR(charge) = 2400;
|
||||
|
@ -4,11 +4,8 @@
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
||||
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
|
||||
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
|
||||
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
|
||||
"_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect",
|
||||
"_fragment", "_index", "_hitData", "_fragTypes", "_fragType", "_foundObjects"];
|
||||
|
||||
private ["_params", "_hitData", "_initialData", "_hpData", "_object", "_foundObjects", "_index", "_foundObjecsts", "_roundType", "_round", "_caliber", "_explosive", "_idh", "_alive", "_exit", "_vm", "_velocity", "_oldVelocity", "_curVelocity", "_diff", "_polar", "_unitDir", "_spallPos", "_pos1", "_i", "_pos2", "_blah", "_data", "_spallPolar", "_warn", "_c", "_m", "_k", "_gC", "_fragPower", "_fragTypes", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", "_fragType", "_fragment", "_pos"];
|
||||
|
||||
_params = _this select 0;
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall", "_spallTrack", "_spallTrackID"];
|
||||
private ["_enabled", "_gun", "_type", "_round", "_doFragTrack", "_doSpall", "_spallTrack", "_spallTrackID"];
|
||||
|
||||
if (!GVAR(enabled)) exitWith {};
|
||||
|
||||
@ -8,10 +8,14 @@ _gun = _this select 0;
|
||||
_type = _this select 4;
|
||||
_round = _this select 6;
|
||||
|
||||
_enabled = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(enabled));
|
||||
if(_enabled < 1) exitWith {};
|
||||
|
||||
if(_round in GVAR(blackList)) exitWith {
|
||||
GVAR(blackList) = GVAR(blackList) - [_round];
|
||||
};
|
||||
|
||||
|
||||
_doFragTrack = false;
|
||||
if(_gun == ACE_player) then {
|
||||
_doFragTrack = true;
|
||||
|
@ -9,13 +9,8 @@
|
||||
if(!isServer) exitWith { };
|
||||
|
||||
// _startTime = diag_tickTime;
|
||||
private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed",
|
||||
"_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom",
|
||||
"_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox",
|
||||
"_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir",
|
||||
"_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount",
|
||||
"_sectorSize", "_sectorOffset", "_randomDir", "_endTime"];
|
||||
|
||||
private ["_startTime", "_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_boundingBox", "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", "_currentCount", "_count", "_vecVar", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", "_sectorSize", "_sectorOffset", "_i", "_randomDir", "_endTime", "_target"];
|
||||
|
||||
_round = _this select 0;
|
||||
_lastPos = _this select 1;
|
||||
|
@ -98,21 +98,21 @@ class CfgVehicles {
|
||||
class ACE_ModuleHearing: Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "Hearing";
|
||||
displayName = "$STR_ACE_Hearing_Module_DisplayName";
|
||||
function = QFUNC(moduleHearing);
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = PATHTOF(UI\Icon_Module_Hearing_ca.paa);
|
||||
class Arguments {
|
||||
class EnableCombatDeafness {
|
||||
displayName = "Enable combat deafness?";
|
||||
description = "Enable combat deafness?";
|
||||
displayName = "$STR_ACE_Hearing_CombatDeafness_DisplayName";
|
||||
description = "$STR_ACE_Hearing_CombatDeafness_Description";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class Yes { name = "Yes"; value = 1; default = 1; };
|
||||
class No { name = "No"; value = 0; };
|
||||
};
|
||||
defaultValue = 1;
|
||||
};
|
||||
};
|
||||
class ModuleDescription {
|
||||
description = "$STR_ACE_Hearing_Module_Description";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -106,8 +106,24 @@
|
||||
<Czech>Vypnout pískání v uších</Czech>
|
||||
<Polish>Wyłącz dzwonienie w uszach</Polish>
|
||||
<Hungarian>Fülcsengés letiltása</Hungarian>
|
||||
<Italian>Disabilita il ronzio</Italian>
|
||||
<Italian>Disabilita i fischi nelle orecchie</Italian>
|
||||
<Portuguese>Desabilitar zumbido de ouvidos</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Hearing_Module_DisplayName">
|
||||
<English>Hearing</English>
|
||||
<Polish>Słuch</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Hearing_CombatDeafness_DisplayName">
|
||||
<English>Enable combat deafness?</English>
|
||||
<Polish>Wł. głuchotę bojową</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Hearing_CombatDeafness_Description">
|
||||
<English>Enable combat deafness?</English>
|
||||
<Polish>Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Hearing_Module_Description">
|
||||
<English></English>
|
||||
<Polish>Głuchota bojowa pojawia się w momentach, kiedy stoimy w pobliżu broni wielkokalibrowej bez ochrony słuchu, lub np. podczas ostrzału artyleryjskiego. Moduł ten pozwala na włączenie lub wyłączenie tego efektu.</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,47 +1,8 @@
|
||||
class GVAR(cursorMenu) {
|
||||
idd = 91919;
|
||||
movingEnable = false;
|
||||
access = 0;
|
||||
movingEnable = 0;
|
||||
enableSimulation = 1;
|
||||
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(dlgCursorMenu)),_this select 0)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),true)]);
|
||||
onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),false)]);
|
||||
objects[] = {};
|
||||
/*class controlsBackground {
|
||||
class Background {
|
||||
idc = 91920;
|
||||
moving = 0;
|
||||
font = "TahomaB";
|
||||
text = "";
|
||||
sizeEx = 0;
|
||||
lineSpacing = 0;
|
||||
access = 0;
|
||||
type = 0;
|
||||
style = 0;
|
||||
size = 1;
|
||||
colorBackground[] = {0, 0, 0, 0.5};
|
||||
colorText[] = {0, 0, 0, 0};
|
||||
x = "safezoneX";
|
||||
y = "safezoneY";
|
||||
w = "safezoneW";
|
||||
h = "safezoneH";
|
||||
};
|
||||
};*/
|
||||
class controls {
|
||||
class Canvas {
|
||||
idc = 91921;
|
||||
moving = 0;
|
||||
font = "TahomaB";
|
||||
text = "";
|
||||
sizeEx = 0;
|
||||
lineSpacing = 0;
|
||||
access = 0;
|
||||
type = 0;
|
||||
style = 0;
|
||||
size = 1;
|
||||
colorBackground[] = {0, 0, 0, 0};
|
||||
colorText[] = {0, 0, 0, 0};
|
||||
x = "safezoneX";
|
||||
y = "safezoneY";
|
||||
w = "safezoneW";
|
||||
h = "safezoneH";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -57,7 +57,7 @@ addMissionEventHandler ["Draw3D", DFUNC(render)];
|
||||
if (_unit != ACE_player || !_isUnconscious) exitWith {};
|
||||
|
||||
GVAR(actionSelected) = false;
|
||||
[] call FUNC(keyUp);
|
||||
[GVAR(openedMenuType), false] call FUNC(keyUp);
|
||||
}] call EFUNC(common,addEventhandler);
|
||||
|
||||
// disable firing while the interact menu is is is opened
|
||||
|
@ -25,6 +25,21 @@ PREP(renderSelector);
|
||||
PREP(setupTextColors);
|
||||
PREP(splitPath);
|
||||
|
||||
// Event handlers for all interact menu controls
|
||||
DFUNC(handleMouseMovement) = {
|
||||
if (GVAR(cursorKeepCentered)) then {
|
||||
GVAR(cursorPos) = GVAR(cursorPos) vectorAdd [_this select 1, _this select 2, 0] vectorDiff [0.5, 0.5, 0];
|
||||
setMousePosition [0.5, 0.5];
|
||||
} else {
|
||||
GVAR(cursorPos) = [_this select 1, _this select 2, 0];
|
||||
};
|
||||
};
|
||||
DFUNC(handleMouseButtonDown) = {
|
||||
if !(GVAR(actionOnKeyRelease)) then {
|
||||
[GVAR(openedMenuType),true] call FUNC(keyUp);
|
||||
};
|
||||
};
|
||||
|
||||
GVAR(keyDown) = false;
|
||||
GVAR(keyDownSelfAction) = false;
|
||||
GVAR(keyDownTime) = 0;
|
||||
@ -51,6 +66,7 @@ GVAR(expandedTime) = diag_tickTime;
|
||||
GVAR(iconCtrls) = [];
|
||||
GVAR(iconCount) = 0;
|
||||
|
||||
GVAR(collectedActionPoints) = [];
|
||||
GVAR(foundActions) = [];
|
||||
GVAR(lastTimeSearchedActions) = -1000;
|
||||
|
||||
|
@ -16,7 +16,7 @@ EXPLODE_2_PVT(_this,_newUnit,_oldUnit);
|
||||
// add to new unit
|
||||
private "_ehid";
|
||||
_ehid = [_newUnit, "DefaultAction", {GVAR(openedMenuType) >= 0}, {
|
||||
if !(GVAR(actionOnKeyRelease)) then {
|
||||
if (!GVAR(actionOnKeyRelease) && GVAR(actionSelected)) then {
|
||||
[GVAR(openedMenuType),true] call FUNC(keyUp);
|
||||
};
|
||||
}] call EFUNC(common,addActionEventHandler);
|
||||
|
@ -37,27 +37,30 @@ GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
|
||||
{(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}} ||
|
||||
{(_menuType == 0) && GVAR(AlwaysUseCursorInteraction)};
|
||||
|
||||
// Delete existing controls in case there's any left
|
||||
GVAR(iconCount) = 0;
|
||||
for "_i" from 0 to (count GVAR(iconCtrls))-1 do {
|
||||
ctrlDelete (GVAR(iconCtrls) select _i);
|
||||
GVAR(ParsedTextCached) set [_i, ""];
|
||||
};
|
||||
GVAR(iconCtrls) resize GVAR(iconCount);
|
||||
|
||||
if (GVAR(useCursorMenu)) then {
|
||||
createDialog QGVAR(cursorMenu);
|
||||
(findDisplay 46) createDisplay QGVAR(cursorMenu); //"RscCinemaBorder";//
|
||||
(finddisplay 91919) displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}];
|
||||
(finddisplay 91919) displayAddEventHandler ["KeyDown", {[_this,'keydown'] call CBA_events_fnc_keyHandler}];
|
||||
// The dialog sets:
|
||||
// uiNamespace getVariable QGVAR(dlgCursorMenu);
|
||||
// uiNamespace getVariable QGVAR(cursorMenuOpened);
|
||||
ctrlEnable [91921, true];
|
||||
GVAR(cursorPos) = [0.5,0.5,0];
|
||||
((finddisplay 91919) displayctrl 91921) ctrlAddEventHandler ["MouseMoving", {
|
||||
if (GVAR(cursorKeepCentered)) then {
|
||||
GVAR(cursorPos) = GVAR(cursorPos) vectorAdd [_this select 1, _this select 2, 0] vectorDiff [0.5, 0.5, 0];
|
||||
setMousePosition [0.5, 0.5];
|
||||
} else {
|
||||
GVAR(cursorPos) = [_this select 1, _this select 2, 0];
|
||||
};
|
||||
}];
|
||||
// handles LMB in cursor mode when action on keyrelease is disabled
|
||||
((finddisplay 91919) displayctrl 91921) ctrlAddEventHandler ["MouseButtonDown", {
|
||||
if !(GVAR(actionOnKeyRelease)) then {
|
||||
[GVAR(openedMenuType),true] call FUNC(keyUp);
|
||||
};
|
||||
}];
|
||||
|
||||
_ctrl = (findDisplay 91919) ctrlCreate ["RscStructuredText", 9922];
|
||||
_ctrl ctrlSetPosition [safeZoneX, safeZoneY, safeZoneW, safeZoneH];
|
||||
_ctrl ctrlCommit 0;
|
||||
|
||||
// handles Mouse moving and LMB in cursor mode when action on keyrelease is disabled
|
||||
((finddisplay 91919) displayctrl 9922) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)];
|
||||
((finddisplay 91919) displayctrl 9922) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)];
|
||||
setMousePosition [0.5, 0.5];
|
||||
};
|
||||
|
||||
|
@ -19,7 +19,7 @@ _calledByClicking = _this select 1;
|
||||
if (GVAR(openedMenuType) < 0) exitWith {true};
|
||||
|
||||
if (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then {
|
||||
closeDialog 0;
|
||||
(findDisplay 91919) closeDisplay 2;
|
||||
};
|
||||
|
||||
if(GVAR(actionSelected)) then {
|
||||
|
@ -14,16 +14,16 @@
|
||||
|
||||
GVAR(currentOptions) = [];
|
||||
|
||||
private ["_player","_numInteractObjects","_numInteractions","_actionsVarName","_classActions","_target","_player","_action","_cameraPos","_cameraDir", "_lambda", "_nearestObjects", "_pos"];
|
||||
private ["_player","_numInteractObjects","_numInteractions","_actionsVarName","_classActions","_target","_player","_action","_cameraPos","_cameraDir", "_lambda", "_nearestObjects", "_pos", "_virtualPoint", "_wavesAtOrigin", "_wavesAtVirtualPoint"];
|
||||
_player = ACE_player;
|
||||
|
||||
_cameraPos = (positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL);
|
||||
_cameraDir = ((positionCameraToWorld [0, 0, 1]) call EFUNC(common,positionToASL)) vectorDiff _cameraPos;
|
||||
|
||||
_fnc_renderNearbyActions = {
|
||||
// Render all nearby interaction menus
|
||||
#define MAXINTERACTOBJECTS 3
|
||||
|
||||
_cameraPos = (positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL);
|
||||
_cameraDir = ((positionCameraToWorld [0, 0, 1]) call EFUNC(common,positionToASL)) vectorDiff _cameraPos;
|
||||
|
||||
GVAR(foundActions) = [];
|
||||
GVAR(lastTimeSearchedActions) = diag_tickTime;
|
||||
|
||||
@ -101,19 +101,26 @@ _fnc_renderSelfActions = {
|
||||
// Iterate through base level class actions and render them if appropiate
|
||||
_actionsVarName = format [QGVAR(SelfAct_%1), typeOf _target];
|
||||
_classActions = missionNamespace getVariable [_actionsVarName, []];
|
||||
|
||||
_pos = if !(GVAR(useCursorMenu)) then {
|
||||
_virtualPoint = (((positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL)) vectorAdd GVAR(selfMenuOffset)) call EFUNC(common,ASLToPosition);
|
||||
_wavesAtOrigin = [(positionCameraToWorld [0, 0, 0])] call EFUNC(common,waveHeightAt);
|
||||
_wavesAtVirtualPoint = [_virtualPoint] call EFUNC(common,waveHeightAt);
|
||||
_virtualPoint set [2, ((_virtualPoint select 2) - _wavesAtOrigin + _wavesAtVirtualPoint)];
|
||||
_virtualPoint
|
||||
} else {
|
||||
[0.5, 0.5]
|
||||
};
|
||||
|
||||
{
|
||||
_action = _x;
|
||||
|
||||
_pos = if !(GVAR(useCursorMenu)) then {
|
||||
(((positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL)) vectorAdd GVAR(selfMenuOffset)) call EFUNC(common,ASLToPosition)
|
||||
} else {
|
||||
[0.5, 0.5]
|
||||
};
|
||||
[_target, _action, _pos] call FUNC(renderBaseMenu);
|
||||
} forEach _classActions;
|
||||
};
|
||||
|
||||
|
||||
GVAR(collectedActionPoints) resize 0;
|
||||
|
||||
// Render nearby actions, unit self actions or vehicle self actions as appropiate
|
||||
if (GVAR(openedMenuType) == 0) then {
|
||||
|
||||
@ -132,3 +139,31 @@ if (GVAR(openedMenuType) == 0) then {
|
||||
} else {
|
||||
ACE_player call _fnc_renderSelfActions;
|
||||
};
|
||||
|
||||
if (count GVAR(collectedActionPoints) > 1) then {
|
||||
// Do the oclusion pass
|
||||
|
||||
// Order action points according to z
|
||||
// @todo: after 1.43 is released switch BIS_fnc_sortBy with sort
|
||||
GVAR(collectedActionPoints) = [GVAR(collectedActionPoints),[],{_x select 0},"ASCEND"] call BIS_fnc_sortBy;
|
||||
//GVAR(collectedActionPoints) sort true;
|
||||
|
||||
private ["_i","_j","_delta"];
|
||||
for [{_i = count GVAR(collectedActionPoints) - 1}, {_i > 0}, {_i = _i - 1}] do {
|
||||
for [{_j = _i - 1}, {_j >= 0}, {_j = _j - 1}] do {
|
||||
// Check if action point _i is ocluded by _j
|
||||
_delta = vectorNormalized ((GVAR(collectedActionPoints) select _i select 1) vectorDiff (GVAR(collectedActionPoints) select _j select 1));
|
||||
|
||||
// If _i is inside a cone with 20º half angle with origin on _j
|
||||
if (_delta select 2 > 0.94) exitWith {
|
||||
GVAR(collectedActionPoints) deleteAt _i;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// Render the non-ocluded points
|
||||
{
|
||||
EXPLODE_3_PVT(_x,_z,_sPos,_activeActionTree);
|
||||
[[], _activeActionTree, _sPos, [180,360]] call FUNC(renderMenu);
|
||||
} forEach GVAR(collectedActionPoints);
|
||||
|
@ -44,8 +44,8 @@ if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player &&
|
||||
|
||||
if (_actualDistance > _distance) exitWith {true};
|
||||
|
||||
if (_actualDistance > 1.0) exitWith {
|
||||
// If distance to action is greater than 1.0 m, check LOS
|
||||
if (_actualDistance > 1.5) exitWith {
|
||||
// If distance to action is greater than 1.5 m, check LOS
|
||||
_line = [_headPos call EFUNC(common,positionToASL), _pos call EFUNC(common,positionToASL), _object, ACE_player];
|
||||
lineIntersects _line
|
||||
};
|
||||
@ -93,11 +93,17 @@ _fnc_print = {
|
||||
// Check if there's something left for rendering
|
||||
if (count _activeActionTree == 0) exitWith {false};
|
||||
|
||||
//EXPLODE_2_PVT(_activeActionTree,_actionData,_actionChildren);
|
||||
|
||||
BEGIN_COUNTER(fnc_renderMenus);
|
||||
|
||||
[[], _activeActionTree, _sPos, [180,360]] call FUNC(renderMenu);
|
||||
// IGNORE_PRIVATE_WARNING(_cameraPos,_cameraDir);
|
||||
if (count _pos > 2) then {
|
||||
_sPos pushBack (((_pos call EFUNC(common,positionToASL)) vectorDiff _cameraPos) vectorDotProduct _cameraDir);
|
||||
} else {
|
||||
_sPos pushBack 0;
|
||||
};
|
||||
|
||||
// Add action point for oclusion and rendering
|
||||
GVAR(collectedActionPoints) pushBack [_sPos select 2, _sPos, _activeActionTree];
|
||||
|
||||
END_COUNTER(fnc_renderMenus);
|
||||
|
||||
|
@ -23,6 +23,10 @@ PARAMS_4(_text,_icon,_sPos,_textSettings);
|
||||
if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
|
||||
_displayNum = [[46, 12] select visibleMap,91919] select (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]);
|
||||
GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
|
||||
if (GVAR(useCursorMenu)) then {
|
||||
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)];
|
||||
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)];
|
||||
};
|
||||
};
|
||||
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
||||
|
||||
|
@ -20,6 +20,10 @@ private ["_displayNum", "_ctrl", "_pos"];
|
||||
if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
|
||||
_displayNum = [[46, 12] select visibleMap,91919] select (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]);
|
||||
GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
|
||||
if (GVAR(useCursorMenu)) then {
|
||||
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)];
|
||||
((finddisplay _displayNum) displayctrl (54021+GVAR(iconCount))) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)];
|
||||
};
|
||||
};
|
||||
|
||||
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
||||
|
@ -10,7 +10,7 @@
|
||||
<Polish>Zawsze wyświetlaj kursor dla własnej interakcji</Polish>
|
||||
<French>Toujours afficher le curseur pour les interactions sur soi-même</French>
|
||||
<Hungarian>Mindig legyen a saját cselekvés kurzorja látható</Hungarian>
|
||||
<Italian>Mostra sempre il cursore per le auto interazioni</Italian>
|
||||
<Italian>Mostra sempre il cursore per le interazioni su se stessi</Italian>
|
||||
<Portuguese>Sempre mostrar cursor para interação pessoal</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorInteraction">
|
||||
@ -58,7 +58,7 @@
|
||||
<Polish>Klawisz własnej interakcji</Polish>
|
||||
<French>Touche d'interaction personnelle</French>
|
||||
<Hungarian>Saját cselekvő gomb</Hungarian>
|
||||
<Italian>Tasto per auto interazioni</Italian>
|
||||
<Italian>Tasto interazione su se stessi</Italian>
|
||||
<Portuguese>Tecla de Interação Pessoal</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_SelfActionsRoot">
|
||||
@ -70,7 +70,7 @@
|
||||
<Polish>Własne akcje</Polish>
|
||||
<French>Interaction personnelle</French>
|
||||
<Hungarian>Saját cselekvések</Hungarian>
|
||||
<Italian>Auto interazioni</Italian>
|
||||
<Italian>Interazioni su se stessi</Italian>
|
||||
<Portuguese>Ações Pessoais</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_VehicleActionsRoot">
|
||||
@ -143,6 +143,7 @@
|
||||
<Spanish>Mantener el cursor centrado</Spanish>
|
||||
<Czech>Udržuj kurzor na středu</Czech>
|
||||
<Portuguese>Manter o cursor centralizado</Portuguese>
|
||||
<Italian>Mantieni il cursore centrato</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_cursorKeepCenteredDescription">
|
||||
<English>Keeps cursor centered and pans the option menu around. Useful if screen size is limited.</English>
|
||||
@ -154,6 +155,7 @@
|
||||
<Polish>Utrzymuje kursor na środku ekranu, zamiast tego ruch myszą powoduje przesuwanie menu interakcji. Użyteczne w przypadku kiedy rozmiar ekranu jest ograniczony.</Polish>
|
||||
<Spanish>Mantiene el cursor centrado y despliega los menús alrededor. Útil si el tamaño de la pantalla es limitado.</Spanish>
|
||||
<Portuguese>Manter o cursor centralizado e mover o menu de opções. Útil caso o tamanho da tela seja limitado.</Portuguese>
|
||||
<Italian>Mantieni il cursore centrato e sposta il menù intorno. Utile se lo schermo è piccolo.</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_ActionOnKeyRelease">
|
||||
<English>Do action when releasing menu key</English>
|
||||
@ -165,6 +167,7 @@
|
||||
<Spanish>Realizar la acción al soltar la tecla menu</Spanish>
|
||||
<Portuguese>Execute a ação quando soltar a tecla de menu</Portuguese>
|
||||
<Hungarian>Cselekvés végrehajtása a menügomb elengedésekor</Hungarian>
|
||||
<Italian>Esegui l'azione quando rilasci il tasto menu</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_textSize">
|
||||
<English>Interaction Text Size</English>
|
||||
@ -176,6 +179,7 @@
|
||||
<Polish>Rozmiar tekstu interakcji</Polish>
|
||||
<Portuguese>Tamanho do texto de interação</Portuguese>
|
||||
<Hungarian>Cselekvő szöveg mérete</Hungarian>
|
||||
<Italian>Dimensione del testo d'interazione</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_shadowSetting">
|
||||
<English>Interaction Text Shadow</English>
|
||||
@ -187,6 +191,7 @@
|
||||
<Polish>Cień tekstu interakcji</Polish>
|
||||
<Portuguese>Sombra do texto de interação</Portuguese>
|
||||
<Hungarian>Cselekvő szöveg árnyéka</Hungarian>
|
||||
<Italian>Ombra del testo d'interazione</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_shadowSettingDescription">
|
||||
<English>Allows controlling the text's shadow. Outline ignores custom shadow colors.</English>
|
||||
@ -198,6 +203,7 @@
|
||||
<Polish>Pozwala kontrolować cień tekstu. Kontury ignorują niestandardowe kolory cienia.</Polish>
|
||||
<Portuguese>Permite controlar a sombra do texto. Contorno ignora sombras com cores customizadas.</Portuguese>
|
||||
<Hungarian>Hozzáférést biztosít a szöveg árnyékának kezeléséhez. A körvonal nem veszi figyelembe az egyedi árnyékszíneket.</Hungarian>
|
||||
<Italian>Permette di controllare l'ombra del testo. L'impostazione "Contorno" ignora il colore dell'ombra.</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_shadowOutline">
|
||||
<English>Outline</English>
|
||||
@ -209,6 +215,7 @@
|
||||
<Polish>Kontur</Polish>
|
||||
<Portuguese>Contorno</Portuguese>
|
||||
<Hungarian>Körvonal</Hungarian>
|
||||
<Italian>Contorno</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -4,22 +4,22 @@ class CfgVehicles {
|
||||
class ACE_ModuleInteraction: Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "Interaction System";
|
||||
displayName = "$STR_ACE_InteractionSystem_Module_DisplayName";
|
||||
function = "ACE_Interaction_fnc_moduleInteraction";
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = PATHTOF(UI\Icon_Module_Interaction_ca.paa);
|
||||
class Arguments {
|
||||
class EnableTeamManagement {
|
||||
displayName = "Enable Team Management";
|
||||
description = "Should players be allowed to use the Team Management Menu? Default: Yes";
|
||||
displayName = "$STR_ACE_InteractionSystem_EnableTeamManagement_DisplayName";
|
||||
description = "$STR_ACE_InteractionSystem_EnableTeamManagement_Description";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class Yes { default = 1; name = "Yes"; value = 1;};
|
||||
class No { name = "No"; value = 0; };
|
||||
};
|
||||
defaultValue = 1;
|
||||
};
|
||||
};
|
||||
class ModuleDescription {
|
||||
description = "$STR_ACE_InteractionSystem_Module_Description";
|
||||
};
|
||||
};
|
||||
|
||||
class Man;
|
||||
|
@ -119,7 +119,7 @@
|
||||
<Russian>Меню взаимодействия (с собой)</Russian>
|
||||
<Hungarian>Cselekvő menü (saját) </Hungarian>
|
||||
<Portuguese>Menu de Interação (Individual)</Portuguese>
|
||||
<Italian>Menù interazione (Individuale)</Italian>
|
||||
<Italian>Menù interazione (individuale)</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_OpenDoor">
|
||||
<English>Open / Close Door</English>
|
||||
@ -263,7 +263,7 @@
|
||||
<Russian>Жесты</Russian>
|
||||
<Hungarian>Kézjelek</Hungarian>
|
||||
<Portuguese>Gestos</Portuguese>
|
||||
<Italian>Segnali gestuali</Italian>
|
||||
<Italian>Gesti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_Gestures_Attack">
|
||||
<English>Attack</English>
|
||||
@ -443,7 +443,7 @@
|
||||
<Czech>Někdo tě poklepal na PRAVÉ rameno</Czech>
|
||||
<Russian>Вас похлопали по ПРАВОМУ плечу</Russian>
|
||||
<Portuguese>Você foi tocado no ombro</Portuguese>
|
||||
<Italian>Ti è stato dato un colpetto sulla spalla</Italian>
|
||||
<Italian>Ti è stato dato un colpetto sulla spalla destra</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_YouWereTappedLeft">
|
||||
<English>You were tapped on the LEFT shoulder.</English>
|
||||
@ -455,7 +455,7 @@
|
||||
<Czech>Někdo tě poklepal na LEVÉ rameno</Czech>
|
||||
<Russian>Вас похлопали по ЛЕВОМУ плечу</Russian>
|
||||
<Portuguese>Você foi tocado no ombro.</Portuguese>
|
||||
<Italian>Ti è stato dato un colpetto sulla spalla</Italian>
|
||||
<Italian>Ti è stato dato un colpetto sulla spalla sinistra</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_CancelSelection">
|
||||
<English>Cancel</English>
|
||||
@ -503,7 +503,7 @@
|
||||
<Hungarian>A földre!</Hungarian>
|
||||
<Russian>Ложись!</Russian>
|
||||
<Portuguese>Abaixe-se!</Portuguese>
|
||||
<Italian>A Terra!</Italian>
|
||||
<Italian>A terra!</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_TeamManagement">
|
||||
<English>Team Management</English>
|
||||
@ -522,7 +522,7 @@
|
||||
<German>Rot</German>
|
||||
<Spanish>Rojo</Spanish>
|
||||
<French>Rouge</French>
|
||||
<Polish>Czerwony</Polish>
|
||||
<Polish>Czerwonych</Polish>
|
||||
<Czech>Červený</Czech>
|
||||
<Russian>Красный</Russian>
|
||||
<Portuguese>Vermelha</Portuguese>
|
||||
@ -534,7 +534,7 @@
|
||||
<German>Grün</German>
|
||||
<Spanish>Verde</Spanish>
|
||||
<French>Vert</French>
|
||||
<Polish>Zielony</Polish>
|
||||
<Polish>Zielonych</Polish>
|
||||
<Czech>Zelený</Czech>
|
||||
<Russian>Зеленый</Russian>
|
||||
<Portuguese>Verde</Portuguese>
|
||||
@ -546,7 +546,7 @@
|
||||
<German>Blau</German>
|
||||
<Spanish>Azul</Spanish>
|
||||
<French>Bleu</French>
|
||||
<Polish>Niebieski</Polish>
|
||||
<Polish>Niebieskich</Polish>
|
||||
<Czech>Modrý</Czech>
|
||||
<Russian>Синий</Russian>
|
||||
<Portuguese>Azul</Portuguese>
|
||||
@ -558,7 +558,7 @@
|
||||
<German>Gelb</German>
|
||||
<Spanish>Amarillo</Spanish>
|
||||
<French>Jaune</French>
|
||||
<Polish>Żółty</Polish>
|
||||
<Polish>Żółtych</Polish>
|
||||
<Czech>Žlutý</Czech>
|
||||
<Russian>Жёлтый</Russian>
|
||||
<Portuguese>Amarela</Portuguese>
|
||||
@ -575,6 +575,7 @@
|
||||
<Czech>Přiřadit k červeným</Czech>
|
||||
<Russian>Назначить в Красную группу</Russian>
|
||||
<French>Assigner à rouge</French>
|
||||
<Italian>Assegna al team rosso</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_AssignTeamGreen">
|
||||
<English>Assign Green</English>
|
||||
@ -586,6 +587,7 @@
|
||||
<Czech>Přiřadit k zeleným</Czech>
|
||||
<Russian>Назначить в Зеленую группу</Russian>
|
||||
<French>Assigner à vert</French>
|
||||
<Italian>Assegna al team verde</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_AssignTeamBlue">
|
||||
<English>Assign Blue</English>
|
||||
@ -597,6 +599,7 @@
|
||||
<Czech>Přiřadit k modrým</Czech>
|
||||
<Russian>Назначить в Синюю группу</Russian>
|
||||
<French>Assigner à bleu</French>
|
||||
<Italian>Assegna al team blu</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_AssignTeamYellow">
|
||||
<English>Assign Yellow</English>
|
||||
@ -608,6 +611,7 @@
|
||||
<Czech>Přiřadit ke žlutým</Czech>
|
||||
<Russian>Назначить в Желтую группу</Russian>
|
||||
<French>Assigner à jaune</French>
|
||||
<Italian>Assegna al team giallo</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_JoinTeamRed">
|
||||
<English>Join Red</English>
|
||||
@ -619,6 +623,7 @@
|
||||
<Czech>Připojit k červeným</Czech>
|
||||
<Russian>Присоединиться к Красной группе</Russian>
|
||||
<French>Rejoindre rouge</French>
|
||||
<Italian>Unirsi al team rosso</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_JoinTeamGreen">
|
||||
<English>Join Green</English>
|
||||
@ -630,6 +635,7 @@
|
||||
<Czech> Připojit k zeleným</Czech>
|
||||
<Russian>Присоединиться к Зеленой группе</Russian>
|
||||
<French>Rejoindre vert</French>
|
||||
<Italian>Unirsi al team verde</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_JoinTeamBlue">
|
||||
<English>Join Blue</English>
|
||||
@ -641,6 +647,7 @@
|
||||
<Czech>Připojit k modrým</Czech>
|
||||
<Russian>Присоединиться к Синей группе</Russian>
|
||||
<French>Rejoindre bleu</French>
|
||||
<Italian>Unirsi al team blu</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_JoinTeamYellow">
|
||||
<English>Join Yellow</English>
|
||||
@ -652,13 +659,14 @@
|
||||
<Czech>Připojit ke žlutým</Czech>
|
||||
<Russian>Присоединиться к Жёлтой группе</Russian>
|
||||
<French>Rejoindre jaune</French>
|
||||
<Italian>Unirsi al team giallo</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_JoinedTeam">
|
||||
<English>You joined Team %1</English>
|
||||
<German>Du bist Gruppe %1 beigetreten</German>
|
||||
<Spanish>Te has unido al equipo %1</Spanish>
|
||||
<French>Tu as rejoint l'équipe %1</French>
|
||||
<Polish>Dołączyłeś do drużyny %1</Polish>
|
||||
<Polish>Dołączyłeś do %1</Polish>
|
||||
<Czech>Připojil ses do %1 týmu</Czech>
|
||||
<Russian>Вы присоединились к группе %1</Russian>
|
||||
<Portuguese>Você uniu-se à Equipe %1</Portuguese>
|
||||
@ -721,7 +729,7 @@
|
||||
<Spanish>Tecla modificadora</Spanish>
|
||||
<Russian>Клавиша-модификатор</Russian>
|
||||
<Portuguese>Tecla Modificadora</Portuguese>
|
||||
<Italian>Modifica tasto</Italian>
|
||||
<Italian>Tasto modifica</Italian>
|
||||
<Hungarian>Módosító billentyű</Hungarian>
|
||||
<Czech>Modifikátor</Czech>
|
||||
</Key>
|
||||
@ -735,7 +743,7 @@
|
||||
<Hungarian>Hatótávolságon kívül</Hungarian>
|
||||
<Polish>Poza zasięgiem</Polish>
|
||||
<Czech>Mimo dosah</Czech>
|
||||
<Italian>Non in raggio</Italian>
|
||||
<Italian>Fuori limite</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_Equipment">
|
||||
<English>Equipment</English>
|
||||
@ -758,8 +766,8 @@
|
||||
<Czech>Odstrčit</Czech>
|
||||
<Hungarian>Tolás</Hungarian>
|
||||
<Russian>Толкать</Russian>
|
||||
<Italian>Spingi</Italian>
|
||||
<Portuguese>Empurrar</Portuguese>
|
||||
<Italian>Spingere</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_Interact">
|
||||
<English>Interact</English>
|
||||
@ -770,7 +778,7 @@
|
||||
<Polish>Interakcja</Polish>
|
||||
<Spanish>Interactuar</Spanish>
|
||||
<Hungarian>Cselekvés</Hungarian>
|
||||
<Italian>Interagisci</Italian>
|
||||
<Italian>Interagire</Italian>
|
||||
<Portuguese>Interagir</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_Passengers">
|
||||
@ -785,5 +793,21 @@
|
||||
<Italian>Passeggeri</Italian>
|
||||
<Portuguese>Passageiros</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_InteractionSystem_Module_DisplayName">
|
||||
<English>Interaction System</English>
|
||||
<Polish>System interakcji</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_InteractionSystem_EnableTeamManagement_DisplayName">
|
||||
<English>Enable Team Management</English>
|
||||
<Polish>Wł. zarządzanie drużyną</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_InteractionSystem_EnableTeamManagement_Description">
|
||||
<English>Should players be allowed to use the Team Management Menu? Default: Yes</English>
|
||||
<Polish>Czy gracze mogą korzystać z menu zarządzania drużyną? Domyślnie: Tak</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_InteractionSystem_Module_Description">
|
||||
<English></English>
|
||||
<Polish>Na zarządzanie drużyną składa się: przydział kolorów dla członków drużyny, przejmowanie dowodzenia, dołączanie/opuszczanie drużyn.</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -29,7 +29,7 @@ class CfgVehicles {
|
||||
};
|
||||
};
|
||||
};
|
||||
class O_static_AT_F: AT_01_base_F {
|
||||
class O_static_AT_F: AT_01_base_F {
|
||||
class Turrets : Turrets {
|
||||
class MainTurret : MainTurret {
|
||||
weapons[] = { QGVAR(Titan_Static) };
|
||||
@ -47,7 +47,7 @@ class CfgVehicles {
|
||||
};
|
||||
};
|
||||
};
|
||||
class I_static_AT_F: AT_01_base_F {
|
||||
class I_static_AT_F: AT_01_base_F {
|
||||
class Turrets : Turrets {
|
||||
class MainTurret : MainTurret {
|
||||
weapons[] = { QGVAR(Titan_Static) };
|
||||
|
@ -38,7 +38,7 @@ class CfgWeapons {
|
||||
lockingTargetSound[] = {"",0,1};
|
||||
lockedTargetSound[] = {"",0,1};
|
||||
};
|
||||
class launch_I_Titan_short_F: launch_Titan_short_base {
|
||||
class launch_I_Titan_short_F: launch_Titan_short_base {
|
||||
GVAR(enabled) = 1;
|
||||
weaponInfoType = "ACE_RscOptics_javelin";
|
||||
modelOptics = PATHTOF(data\reticle_titan.p3d);
|
||||
@ -48,7 +48,7 @@ class CfgWeapons {
|
||||
lockingTargetSound[] = {"",0,1};
|
||||
lockedTargetSound[] = {"",0,1};
|
||||
};
|
||||
class launch_O_Titan_short_F: launch_Titan_short_base {
|
||||
class launch_O_Titan_short_F: launch_Titan_short_base {
|
||||
GVAR(enabled) = 1;
|
||||
weaponInfoType = "ACE_RscOptics_javelin";
|
||||
modelOptics = PATHTOF(data\reticle_titan.p3d);
|
||||
@ -59,7 +59,7 @@ class CfgWeapons {
|
||||
lockingTargetSound[] = {"",0,1};
|
||||
lockedTargetSound[] = {"",0,1};
|
||||
};
|
||||
class launch_Titan_short_F: launch_Titan_short_base {
|
||||
class launch_Titan_short_F: launch_Titan_short_base {
|
||||
GVAR(enabled) = 1;
|
||||
weaponInfoType = "ACE_RscOptics_javelin";
|
||||
modelOptics = PATHTOF(data\reticle_titan.p3d);
|
||||
|
1
addons/kestrel4500/$PBOPREFIX$
Normal file
1
addons/kestrel4500/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\kestrel4500
|
@ -54,6 +54,7 @@ class Kestrel4500_Display
|
||||
name="Kestrel4500_Display";
|
||||
idd=-1;
|
||||
onLoad="uiNamespace setVariable ['Kestrel4500_Display', (_this select 0)]";
|
||||
onUnload=QUOTE(_this call FUNC(onCloseDialog));
|
||||
movingEnable=1;
|
||||
controlsBackground[]={};
|
||||
objects[]={};
|
||||
@ -217,6 +218,7 @@ class RscTitles
|
||||
{
|
||||
idd=-1;
|
||||
onLoad="with uiNameSpace do { RscKestrel4500 = _this select 0 };";
|
||||
onUnload=(_this call FUNC(onCloseDisplay));
|
||||
movingEnable=0;
|
||||
duration=60;
|
||||
fadeIn="false";
|
||||
|
@ -3,7 +3,6 @@
|
||||
ADDON = false;
|
||||
|
||||
PREP(buttonPressed);
|
||||
PREP(calculateWindSpeed);
|
||||
PREP(canShow);
|
||||
PREP(collectData);
|
||||
PREP(createKestrelDialog);
|
||||
@ -13,4 +12,7 @@ PREP(measureWindSpeed);
|
||||
PREP(updateDisplay);
|
||||
PREP(updateImpellerState);
|
||||
|
||||
PREP(onCloseDialog);
|
||||
PREP(onCloseDisplay);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -1,68 +0,0 @@
|
||||
/*
|
||||
* Author: Ruthberg
|
||||
*
|
||||
* Calculates the wind speed at a given world position
|
||||
*
|
||||
* Arguments:
|
||||
* 0: _this - world position <posASL>
|
||||
*
|
||||
* Return Value:
|
||||
* 0: wind speed - m/s <NUMBER>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_windSpeed", "_windDir", "_newWindSpeed", "_windSource"];
|
||||
|
||||
fnc_polar2vect = {
|
||||
private ["_mag2D"];
|
||||
_mag2D = (_this select 0) * cos((_this select 2));
|
||||
[_mag2D * sin((_this select 1)), _mag2D * cos((_this select 1)), (_this select 0) * sin((_this select 2))];
|
||||
};
|
||||
|
||||
_windSpeed = vectorMagnitude ACE_wind;
|
||||
_windDir = (ACE_wind select 0) atan2 (ACE_wind select 1);
|
||||
|
||||
// Terrain effect on wind
|
||||
if (_windSpeed > 0.05) then {
|
||||
_newWindSpeed = 0;
|
||||
{
|
||||
_windSource = [100, _windDir + 180, _x] call fnc_polar2vect;
|
||||
if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 9) * _windSpeed;
|
||||
};
|
||||
_windSource = [100, _windDir + 180 + _x, 0] call fnc_polar2vect;
|
||||
if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 9) * _windSpeed;
|
||||
};
|
||||
_windSource = [100, _windDir + 180 - _x, 0] call fnc_polar2vect;
|
||||
if (!(terrainIntersectASL [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 9) * _windSpeed;
|
||||
};
|
||||
} forEach [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
||||
_windSpeed = _newWindSpeed;
|
||||
};
|
||||
|
||||
// Obstacle effect on wind
|
||||
if (_windSpeed > 0.05) then {
|
||||
_newWindSpeed = 0;
|
||||
{
|
||||
_windSource = [20, _windDir + 180, _x] call fnc_polar2vect;
|
||||
if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 2) * _windSpeed;
|
||||
};
|
||||
_windSource = [20, _windDir + 180 + _x, 0] call fnc_polar2vect;
|
||||
if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 2) * _windSpeed;
|
||||
};
|
||||
_windSource = [20, _windDir + 180 - _x, 0] call fnc_polar2vect;
|
||||
if (!(lineIntersects [_this, _this vectorAdd _windSource])) exitWith {
|
||||
_newWindSpeed = cos(_x * 2) * _windSpeed;
|
||||
};
|
||||
} forEach [0, 5, 10, 15, 20, 25, 30, 35, 40, 45];
|
||||
_windSpeed = _newWindSpeed;
|
||||
};
|
||||
_windSpeed = 0 max _windSpeed;
|
||||
|
||||
_windSpeed
|
@ -14,7 +14,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
//if (dialog) exitWith { false };
|
||||
if (GVAR(Kestrel4500)) exitWith { false };
|
||||
if (underwater ACE_player) exitWith { false };
|
||||
if (!("ACE_Kestrel4500" in (uniformItems ACE_player)) && !("ACE_Kestrel4500" in (vestItems ACE_player))) exitWith { false };
|
||||
|
||||
|
@ -19,12 +19,13 @@ private ["_playerDir", "_windSpeed", "_windDir"];
|
||||
_playerDir = getDir ACE_player;
|
||||
_windSpeed = vectorMagnitude ACE_wind;
|
||||
_windDir = (ACE_wind select 0) atan2 (ACE_wind select 1);
|
||||
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
_windSpeed = (eyePos ACE_player) call EFUNC(advanced_ballistics,calculateWindSpeed);
|
||||
// With wind gradient
|
||||
_windSpeed = [eyePos ACE_player, true, true, true] call EFUNC(weather,calculateWindSpeed);
|
||||
_windSpeed = abs(cos(_playerDir - _windDir)) * _windSpeed;
|
||||
} else {
|
||||
_windSpeed = (eyePos ACE_player) call FUNC(calculateWindSpeed);
|
||||
// Without wind gradient
|
||||
_windSpeed = [eyePos ACE_player, false, true, true] call EFUNC(weather,calculateWindSpeed);
|
||||
};
|
||||
|
||||
if (_windSpeed > 0.3 || {GVAR(MeasuredWindSpeed) > 0.1 && _windSpeed > 0.125}) then {
|
||||
|
4
addons/kestrel4500/functions/fnc_onCloseDialog.sqf
Normal file
4
addons/kestrel4500/functions/fnc_onCloseDialog.sqf
Normal file
@ -0,0 +1,4 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
uiNamespace setVariable ['Kestrel4500_Display', nil];
|
||||
GVAR(Kestrel4500) = false;
|
4
addons/kestrel4500/functions/fnc_onCloseDisplay.sqf
Normal file
4
addons/kestrel4500/functions/fnc_onCloseDisplay.sqf
Normal file
@ -0,0 +1,4 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
uiNamespace setVariable ['RscKestrel4500', nil];
|
||||
GVAR(Overlay) = false;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user