mirror of
https://github.com/acemod/ACE3.git
synced 2025-07-25 04:42:48 +00:00
2
LICENSE
2
LICENSE
@ -1,4 +1,4 @@
|
|||||||
Copyright (C) 2014 Felix "KoffeinFlummi" Wiegand
|
Copyright (C) 2015 Felix "KoffeinFlummi" Wiegand
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
87
README.md
87
README.md
@ -1,48 +1,83 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg" height="80" />
|
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg"
|
||||||
|
height="112">
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/acemod/ACE3/releases">
|
<a href="https://github.com/acemod/ACE3/releases">
|
||||||
<img src="http://img.shields.io/badge/release-3.0-green.svg?style=flat" alt="ACE version">
|
<img src="http://img.shields.io/badge/Version-3.0.0-blue.svg?style=flat"
|
||||||
|
alt="ACE version">
|
||||||
</a>
|
</a>
|
||||||
<a href="#">
|
<a href="https://github.com/acemod/ACE3/archive/master.zip">
|
||||||
<img src="http://img.shields.io/badge/download-22_MB-blue.svg?style=flat" alt="ACE download">
|
<img src="http://img.shields.io/badge/Download-48.3_MB-green.svg?style=flat"
|
||||||
|
alt="ACE download">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/acemod/ACE3/issues">
|
<a href="https://github.com/acemod/ACE3/issues">
|
||||||
<img src="http://img.shields.io/github/issues/acemod/ACE3.svg?style=flat" alt="ACE issues">
|
<img src="http://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat&label=Issues"
|
||||||
|
alt="ACE issues">
|
||||||
|
</a>
|
||||||
|
<a href="http://forums.bistudio.com/showthread.php?190433-ACE3-A-collaborative-merger-between-AGM-CSE-and-ACE&p=2910796&viewfull=1#post2910796">
|
||||||
|
<img src="https://img.shields.io/badge/BIF-Thread-lightgrey.svg?style=flat"
|
||||||
|
alt="BIF thread">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
||||||
<img src="http://img.shields.io/badge/license-GPLv2-red.svg?style=flat" alt="ACE license">
|
<img src="http://img.shields.io/badge/License-GPLv2-red.svg?style=flat"
|
||||||
|
alt="ACE license">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center"><sup><strong>Requires the latest version of <a href="http://www.armaholic.com/page.php?id=18767">CBA A3</a> | <a href="#">BIF thread</a></strong></sup></p>
|
<p align="center"><sup><strong>Requires the latest version of <a href="http://www.armaholic.com/page.php?id=18767">CBA A3</a>. Visit us on <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup></p>
|
||||||
|
|
||||||
**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3.
|
**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3.
|
||||||
|
|
||||||
This mod is entirely **open-source**, and everyone is free to propose changes or maintain their own, customized version as long as they make their changes open to the public in accordance with the GNU General Public License (for more information check the license file attached to this project).
|
The project is entirely **open-source** and all contributions are welcome. Feel free to maintain your own custom version, so long as the changes you make are open to the public in accordance with the GNU General Public License ([GPLv2](https://github.com/acemod/ACE3/blob/master/LICENSE)).
|
||||||
|
|
||||||
The mod is **built modularly** — almost any PBO can be removed, thus a team can maintain its own tailored version of ACE, which excludes a select number of components that they don't like, or which conflict with other add-ons. Components themselves, like e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience.
|
The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE by simply excluding any components they don't need, or those possibly in conflict with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience.
|
||||||
|
|
||||||
### Features
|
### Core features
|
||||||
* Improved medical system
|
* Brand new 3D interaction/action system
|
||||||
* Logistics system including cargo transport and vehicle maintenance
|
* Performance and reliability framework
|
||||||
* Explosives system including different trigger types
|
* Focus on modularity and customization
|
||||||
|
* New flexible client and server settings & configuration
|
||||||
|
* Improved medical system with various levels (basic/advanced) focus on gameplay/realism
|
||||||
|
* Proper & consistent network-synced weather
|
||||||
|
* Wind and weather-based ballistics
|
||||||
* Captivity system
|
* Captivity system
|
||||||
* Realistic names for vehicles and weapons
|
* Explosives system, including different trigger types
|
||||||
* Realistic ballistics including wind and humidity
|
* Map screen improvements – marker placement and map tools
|
||||||
* Backblast simulation
|
* Advanced missile guidance and laser designation
|
||||||
* A fire control system for armored vehicles and helicopters
|
|
||||||
***and more...***
|
|
||||||
|
|
||||||
#### Guides & How-Tos
|
#### Additional features
|
||||||
If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md).
|
* Carrying and dragging
|
||||||
|
* Realistic names for vehicles and weapons
|
||||||
|
* A fire control system (FCS) for armored vehicles and helicopters
|
||||||
|
* Realistic ballistics/FCS calculated in C/C++ extensions
|
||||||
|
* Backblast area and overpressure simulation
|
||||||
|
* Disposable launchers
|
||||||
|
* Realistic G-forces
|
||||||
|
* Vehicle locking
|
||||||
|
* Realistic night and thermal vision modes
|
||||||
|
* Magazine repacking
|
||||||
|
* Realistic weapon overheating mechanic
|
||||||
|
* Combat deafness (temporary loss of hearing) simulation
|
||||||
|
* Improved ragdoll physics
|
||||||
|
* Improved interactions for AARs and ammo bearers
|
||||||
|
* Adjustable sniper scopes
|
||||||
|
* No idle animation with lowered weapon
|
||||||
|
* No talking player avatar
|
||||||
|
* Jumping over obstacles, climbing over walls and cutting down fences
|
||||||
|
* Vector, MicroDAGR and Kestrel devices<br>
|
||||||
|
***and much more...***
|
||||||
|
|
||||||
|
### Guides & how-tos
|
||||||
|
If you installed ACE3 but have trouble understanding how it all works, or where to start, read this first:
|
||||||
|
* [Getting started](http://ace3mod.com/wiki/user/getting-started.html)
|
||||||
|
|
||||||
#### Contributing
|
#### Contributing
|
||||||
If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address.
|
You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address.
|
||||||
|
|
||||||
To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). See [this link](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) for details.
|
Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report a bug, propose a feature, or suggest changes to the existing ones. See also:
|
||||||
|
* [How to report an issue](http://ace3mod.com/wiki/user/how-to-report-an-issue.html)
|
||||||
|
* [How to make a feature request](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html)
|
||||||
|
|
||||||
#### Testing & Building
|
#### Testing & building
|
||||||
If you want to help us test the latest development changes, feel free to download our master branch, using either git — if familiar with the process — or directly, by following [this link](https://github.com/acemod/ACE3/archive/master.zip).
|
To help us test the latest development changes, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or [with git](https://help.github.com/articles/fetching-a-remote/)), then assemble a test build:
|
||||||
|
* [Setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) – step-by-step instructions on how to properly setup and build a version of ACE for testing purposes.
|
||||||
To find out how to set up your development environment and build a version of ACE for testing, follow [these instructions](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md).
|
|
||||||
|
@ -20,19 +20,10 @@ GVAR(WindInfoStart) = time;
|
|||||||
GVAR(Protractor) = false;
|
GVAR(Protractor) = false;
|
||||||
GVAR(ProtractorStart) = time;
|
GVAR(ProtractorStart) = time;
|
||||||
|
|
||||||
// Those are only used in the pure sqf version (extension free PFH)
|
|
||||||
GVAR(SimulationPrecision) = 2;
|
|
||||||
GVAR(WindEnabled) = true;
|
|
||||||
GVAR(SpinDriftEnabled) = true;
|
|
||||||
GVAR(CoriolisEnabled) = true;
|
|
||||||
GVAR(EoetvoesEnabled) = true;
|
|
||||||
GVAR(AdvancedAirDragEnabled) = true;
|
|
||||||
GVAR(TransonicRegionEnabled) = true;
|
|
||||||
GVAR(AtmosphericDensitySimulationEnabled) = true;
|
|
||||||
|
|
||||||
GVAR(currentGrid) = 0;
|
GVAR(currentGrid) = 0;
|
||||||
GVAR(INIT_MESSAGE_ENABLED) = false;
|
GVAR(INIT_MESSAGE_ENABLED) = false;
|
||||||
|
|
||||||
|
GVAR(extensionAvailable) = true;
|
||||||
/* @TODO: Remove this until verisoning is in sync with cmake/build versioning
|
/* @TODO: Remove this until verisoning is in sync with cmake/build versioning
|
||||||
GVAR(extensionVersion) = ("ace_advanced_ballistics" callExtension "version");
|
GVAR(extensionVersion) = ("ace_advanced_ballistics" callExtension "version");
|
||||||
GVAR(extensionAvailable) = (GVAR(extensionVersion) == EXTENSION_REQUIRED_VERSION);
|
GVAR(extensionAvailable) = (GVAR(extensionVersion) == EXTENSION_REQUIRED_VERSION);
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* Author: Ruthberg
|
|
||||||
*
|
|
||||||
* Calculates the air density
|
|
||||||
*
|
|
||||||
* Arguments:
|
|
||||||
* 0: temperature - degrees celcius <NUMBER>
|
|
||||||
* 1: pressure - hPa <NUMBER>
|
|
||||||
* 2: relativeHumidity - value between 0.0 and 1.0 <NUMBER>
|
|
||||||
*
|
|
||||||
* Return Value:
|
|
||||||
* 0: density of air - kg * m^(-3) <NUMBER>
|
|
||||||
*
|
|
||||||
* Return value:
|
|
||||||
* None
|
|
||||||
*/
|
|
||||||
#include "script_component.hpp"
|
|
||||||
|
|
||||||
private ["_temperature", "_pressure", "_relativeHumidity"];
|
|
||||||
_temperature = _this select 0; // in C
|
|
||||||
_pressure = _this select 1; // in hPa
|
|
||||||
_relativeHumidity = _this select 2; // as ratio 0-1
|
|
||||||
|
|
||||||
_pressure = _pressure * 100;
|
|
||||||
|
|
||||||
if (_relativeHumidity > 0) then {
|
|
||||||
private ["_pSat", "_vaporPressure", "_partialPressure"];
|
|
||||||
// Saturation vapor pressure calculated according to: http://wahiduddin.net/calc/density_algorithms.htm
|
|
||||||
_pSat = 6.1078 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3));
|
|
||||||
_vaporPressure = _relativeHumidity * _pSat;
|
|
||||||
_partialPressure = _pressure - _vaporPressure;
|
|
||||||
|
|
||||||
(_partialPressure * DRY_AIR_MOLAR_MASS + _vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(_temperature))
|
|
||||||
} else {
|
|
||||||
_pressure / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(_temperature))
|
|
||||||
};
|
|
@ -19,7 +19,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleAccessory", "_initSpeedCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_bulletWeight", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef"];
|
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef", "_ballisticCoefficients", "_velocityBoundaries"];
|
||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
_weapon = _this select 1;
|
_weapon = _this select 1;
|
||||||
_mode = _this select 3;
|
_mode = _this select 3;
|
||||||
@ -35,49 +35,34 @@ if (!([_unit] call EFUNC(common,isPlayer))) exitWith {};
|
|||||||
if (underwater _unit) exitWith {};
|
if (underwater _unit) exitWith {};
|
||||||
if (!(_ammo isKindOf "BulletBase")) exitWith {};
|
if (!(_ammo isKindOf "BulletBase")) exitWith {};
|
||||||
if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {};
|
if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {};
|
||||||
if (GVAR(onlyActiveForLocalPlayers) && _unit != ACE_player) then { _abort = true; };
|
if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then {
|
||||||
//if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // TODO: We currently do not have firedEHs on vehicles
|
if (GVAR(alwaysSimulateForSnipers)) then {
|
||||||
if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; };
|
|
||||||
|
|
||||||
if (_abort && alwaysSimulateForSnipers) then {
|
|
||||||
// The shooter is non local
|
// The shooter is non local
|
||||||
if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then {
|
if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then {
|
||||||
_opticsName = (primaryWeaponItems _unit) select 2;
|
_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
|
_abort = _opticType != 2; // We only abort if the non local shooter is not a sniper
|
||||||
};
|
};
|
||||||
|
} else {
|
||||||
|
_abort = true;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
//if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // TODO: We currently do not have firedEHs on vehicles
|
||||||
|
if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; };
|
||||||
|
|
||||||
if (_abort || !(GVAR(extensionAvailable))) exitWith {
|
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");
|
_airFriction = getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction");
|
||||||
_muzzleVelocity = getNumber(configFile >> "cfgMagazines" >> _magazine >> "initSpeed");
|
|
||||||
_muzzleVelocityCoef = getNumber(configFile >> "cfgWeapons" >> _weapon >> "initSpeed");
|
|
||||||
if (_muzzleVelocityCoef > 0) then {
|
|
||||||
_muzzleVelocity = _muzzleVelocityCoef;
|
|
||||||
};
|
|
||||||
if (_muzzleVelocityCoef < 0) then {
|
|
||||||
_muzzleVelocity = _muzzleVelocity * (-1 * _muzzleVelocityCoef);
|
|
||||||
};
|
|
||||||
|
|
||||||
_muzzleAccessory = "";
|
_bulletVelocity = velocity _bullet;
|
||||||
switch (currentWeapon _unit) do {
|
_muzzleVelocity = vectorMagnitude _bulletVelocity;
|
||||||
case primaryWeapon _unit: { _muzzleAccessory = (primaryWeaponItems _unit) select 0; };
|
|
||||||
case handgunWeapon _unit: { _muzzleAccessory = (handgunItems _unit) select 0; };
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_muzzleAccessory != "" && isNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed")) then {
|
|
||||||
_initSpeedCoef = getNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed");
|
|
||||||
_muzzleVelocity = _muzzleVelocity * _initSpeedCoef;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (GVAR(barrelLengthInfluenceEnabled)) then {
|
if (GVAR(barrelLengthInfluenceEnabled)) then {
|
||||||
_muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift);
|
_muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift);
|
||||||
if (_muzzleVelocityShift != 0) then {
|
if (_muzzleVelocityShift != 0) then {
|
||||||
_bulletVelocity = velocity _bullet;
|
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
|
||||||
_bullet setVelocity _bulletVelocity;
|
_bullet setVelocity _bulletVelocity;
|
||||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||||
};
|
};
|
||||||
@ -87,19 +72,23 @@ if (GVAR(ammoTemperatureEnabled)) then {
|
|||||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
||||||
_muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
|
_muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
|
||||||
if (_muzzleVelocityShift != 0) then {
|
if (_muzzleVelocityShift != 0) then {
|
||||||
_bulletVelocity = velocity _bullet;
|
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
|
||||||
_bullet setVelocity _bulletVelocity;
|
_bullet setVelocity _bulletVelocity;
|
||||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
_bulletTraceVisible = false;
|
_bulletTraceVisible = false;
|
||||||
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER" && currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER") then {
|
||||||
|
if (currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]) then {
|
||||||
|
_bulletTraceVisible = true;
|
||||||
|
} else {
|
||||||
|
if (currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
||||||
_opticsName = (primaryWeaponItems ACE_player) select 2;
|
_opticsName = (primaryWeaponItems ACE_player) select 2;
|
||||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||||
_bulletTraceVisible = (_opticType == 2 || currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]);
|
_bulletTraceVisible = _opticType == 2;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
_caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber");
|
_caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber");
|
||||||
@ -131,7 +120,6 @@ _dragModel = 1;
|
|||||||
_ballisticCoefficients = [];
|
_ballisticCoefficients = [];
|
||||||
_velocityBoundaries = [];
|
_velocityBoundaries = [];
|
||||||
_atmosphereModel = "ICAO";
|
_atmosphereModel = "ICAO";
|
||||||
if (GVAR(AdvancedAirDragEnabled)) then {
|
|
||||||
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then {
|
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then {
|
||||||
_dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel");
|
_dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel");
|
||||||
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
||||||
@ -147,16 +135,18 @@ if (GVAR(AdvancedAirDragEnabled)) then {
|
|||||||
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
||||||
_atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
_atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef USE_ADVANCEDBALLISTICS_DLL
|
|
||||||
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||||
|
|
||||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||||
|
|
||||||
[{
|
[{
|
||||||
private ["_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||||
EXPLODE_4_PVT(_this select 0,_bullet,_caliber,_bulletTraceVisible,_index);
|
_args = _this select 0;
|
||||||
|
_bullet = _args select 0;
|
||||||
|
_caliber = _args select 1;
|
||||||
|
_bulletTraceVisible = _args select 2;
|
||||||
|
_index = _args select 3;
|
||||||
|
|
||||||
_bulletVelocity = velocity _bullet;
|
_bulletVelocity = velocity _bullet;
|
||||||
_bulletPosition = getPosASL _bullet;
|
_bulletPosition = getPosASL _bullet;
|
||||||
@ -174,210 +164,3 @@ if (GVAR(AdvancedAirDragEnabled)) then {
|
|||||||
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)]);
|
call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]);
|
||||||
|
|
||||||
}, GVAR(simulationInterval), [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]] call CBA_fnc_addPerFrameHandler;
|
}, GVAR(simulationInterval), [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]] call CBA_fnc_addPerFrameHandler;
|
||||||
#else
|
|
||||||
_index = count GVAR(bulletDatabase);
|
|
||||||
if (count GVAR(bulletDatabaseFreeIndices) > 0) then {
|
|
||||||
_index = GVAR(bulletDatabaseFreeIndices) select 0;
|
|
||||||
GVAR(bulletDatabaseFreeIndices) = GVAR(bulletDatabaseFreeIndices) - [_index];
|
|
||||||
};
|
|
||||||
|
|
||||||
GVAR(bulletDatabase) set[_index, [_bullet, _caliber, _airFriction, _muzzleVelocity, _stabilityFactor, _transonicStabilityCoef, _twistDirection, _unit, _bulletTraceVisible, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _index]];
|
|
||||||
GVAR(bulletDatabaseStartTime) set[_index, time];
|
|
||||||
GVAR(bulletDatabaseSpeed) set[_index, 0];
|
|
||||||
GVAR(bulletDatabaseFrames) set[_index, 1];
|
|
||||||
GVAR(bulletDatabaseLastFrame) set[_index, time];
|
|
||||||
GVAR(bulletDatabaseHDeflect) set[_index, 0];
|
|
||||||
GVAR(bulletDatabaseSpinDrift) set[_index, 0];
|
|
||||||
|
|
||||||
if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then {
|
|
||||||
[{
|
|
||||||
private ["_bulletDatabaseEntry", "_bullet", "_caliber", "_muzzleVelocity", "_frames", "_speed", "_airFriction", "_airFrictionRef", "_dragModel", "_atmosphereModel", "_ballisticCoefficient", "_ballisticCoefficients", "_velocityBoundaries", "_airDensity", "_stabilityFactor", "_transonicStabilityCoef", "_twistDirection", "_unit", "_bulletTraceVisible", "_index", "_temperature", "_humidity", "_deltaT", "_TOF", "_bulletPosition", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_bulletSpeedAvg", "_wind", "_drag", "_dragRef", "_vect", "_accel", "_accelRef", "_centripetalAccel", "_pressure", "_pressureDeviation", "_windSourceObstacle", "_windSourceTerrain", "_height", "_roughnessLength", "_bulletDir", "_horizontalDeflection", "_horizontalDeflectionPartial", "_spinDrift", "_spinDriftPartial"];
|
|
||||||
|
|
||||||
{
|
|
||||||
_bulletDatabaseEntry = (GVAR(bulletDatabase) select _x);
|
|
||||||
if (!alive (_bulletDatabaseEntry select 0)) then {
|
|
||||||
_index = _bulletDatabaseEntry select 13;
|
|
||||||
GVAR(bulletDatabaseOccupiedIndices) = GVAR(bulletDatabaseOccupiedIndices) - [_index];
|
|
||||||
GVAR(bulletDatabaseFreeIndices) pushBack _index;
|
|
||||||
};
|
|
||||||
true
|
|
||||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
|
||||||
|
|
||||||
if (count GVAR(bulletDatabaseOccupiedIndices) == 0) exitWith {
|
|
||||||
GVAR(bulletDatabase) = [];
|
|
||||||
GVAR(bulletDatabaseStartTime) = [];
|
|
||||||
GVAR(bulletDatabaseSpeed) = [];
|
|
||||||
GVAR(bulletDatabaseFrames) = [];
|
|
||||||
GVAR(bulletDatabaseLastFrame) = [];
|
|
||||||
GVAR(bulletDatabaseHDeflect) = [];
|
|
||||||
GVAR(bulletDatabaseSpinDrift) = [];
|
|
||||||
GVAR(bulletDatabaseOccupiedIndices) = [];
|
|
||||||
GVAR(bulletDatabaseFreeIndices) = [];
|
|
||||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
|
||||||
};
|
|
||||||
|
|
||||||
{
|
|
||||||
_bulletDatabaseEntry = GVAR(bulletDatabase) select _x;
|
|
||||||
_bullet = _bulletDatabaseEntry select 0;
|
|
||||||
_caliber = _bulletDatabaseEntry select 1;
|
|
||||||
_airFriction = _bulletDatabaseEntry select 2;
|
|
||||||
_muzzleVelocity = _bulletDatabaseEntry select 3;
|
|
||||||
_stabilityFactor = _bulletDatabaseEntry select 4;
|
|
||||||
_transonicStabilityCoef = _bulletDatabaseEntry select 5;
|
|
||||||
_twistDirection = _bulletDatabaseEntry select 6;
|
|
||||||
_unit = _bulletDatabaseEntry select 7;
|
|
||||||
_bulletTraceVisible = _bulletDatabaseEntry select 8;
|
|
||||||
_ballisticCoefficients = _bulletDatabaseEntry select 9;
|
|
||||||
_velocityBoundaries = _bulletDatabaseEntry select 10;
|
|
||||||
_atmosphereModel = _bulletDatabaseEntry select 11;
|
|
||||||
_dragModel = _bulletDatabaseEntry select 12;
|
|
||||||
_index = _bulletDatabaseEntry select 13;
|
|
||||||
|
|
||||||
_TOF = time - (GVAR(bulletDatabaseStartTime) select _index);
|
|
||||||
|
|
||||||
_bulletVelocity = velocity _bullet;
|
|
||||||
_bulletPosition = getPosASL _bullet;
|
|
||||||
|
|
||||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
|
||||||
_bulletDir = (_bulletVelocity select 0) atan2 (_bulletVelocity select 1);
|
|
||||||
|
|
||||||
_speed = (GVAR(bulletDatabaseSpeed) select _index);
|
|
||||||
GVAR(bulletDatabaseSpeed) set[_index, _speed + _bulletSpeed];
|
|
||||||
|
|
||||||
_frames = (GVAR(bulletDatabaseFrames) select _index);
|
|
||||||
GVAR(bulletDatabaseFrames) set[_index, _frames + 1];
|
|
||||||
|
|
||||||
_bulletSpeedAvg = (_speed / _frames);
|
|
||||||
|
|
||||||
if ((GVAR(SimulationPrecision) < 2) || {_frames % GVAR(SimulationPrecision) == _index % GVAR(SimulationPrecision)}) then {
|
|
||||||
_deltaT = time - (GVAR(bulletDatabaseLastFrame) select _index);
|
|
||||||
GVAR(bulletDatabaseLastFrame) set[_index, time];
|
|
||||||
|
|
||||||
_trueVelocity = _bulletVelocity;
|
|
||||||
_trueSpeed = _bulletSpeed;
|
|
||||||
_wind = [0, 0, 0];
|
|
||||||
if (GVAR(WindEnabled) && (vectorMagnitude ACE_wind) > 0) then {
|
|
||||||
_windSourceObstacle = _bulletPosition vectorDiff ((vectorNormalized ACE_wind) vectorMultiply 10);
|
|
||||||
_windSourceTerrain = _bulletPosition vectorDiff ((vectorNormalized ACE_wind) vectorMultiply 100);
|
|
||||||
|
|
||||||
if (!(lineIntersects [_bulletPosition, _windSourceObstacle]) && !(terrainIntersectASL [_bulletPosition, _windSourceTerrain])) then {
|
|
||||||
_wind = ACE_wind;
|
|
||||||
_height = ASLToATL(_bulletPosition) select 2;
|
|
||||||
_height = 0 max _height min 20;
|
|
||||||
if (_height < 20) then {
|
|
||||||
_roughnessLength = _bulletPosition call FUNC(calculateRoughnessLength);
|
|
||||||
_wind = _wind vectorMultiply (ln(_height / _roughnessLength) / ln(20 / _roughnessLength));
|
|
||||||
};
|
|
||||||
|
|
||||||
_trueVelocity = _bulletVelocity vectorDiff _wind;
|
|
||||||
_trueSpeed = vectorMagnitude _trueVelocity;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
_airFrictionRef = _airFriction;
|
|
||||||
if (GVAR(AdvancedAirDragEnabled) && (count _ballisticCoefficients) == (count _velocityBoundaries) + 1) then {
|
|
||||||
_dragRef = _deltaT * _airFrictionRef * _bulletSpeed * _bulletSpeed;
|
|
||||||
_accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorDiff _accelRef;
|
|
||||||
|
|
||||||
_ballisticCoefficient = (_ballisticCoefficients select 0);
|
|
||||||
for "_i" from (count _velocityBoundaries) - 1 to 0 step -1 do {
|
|
||||||
if (_bulletSpeed < (_velocityBoundaries select _i)) exitWith {
|
|
||||||
_ballisticCoefficient = (_ballisticCoefficients select (_i + 1));
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
|
|
||||||
_pressure = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure);
|
|
||||||
_temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2);
|
|
||||||
_humidity = EGVAR(weather,currentHumidity);
|
|
||||||
_airDensity = STD_AIR_DENSITY_ICAO;
|
|
||||||
if (_humidity > 0) then {
|
|
||||||
private ["_pSat", "_vaporPressure", "_partialPressure"];
|
|
||||||
// Saturation vapor pressure calculated according to: http://wahiduddin.net/calc/density_algorithms.htm
|
|
||||||
_pSat = 6.1078 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3));
|
|
||||||
_vaporPressure = _humidity * _pSat;
|
|
||||||
_partialPressure = (_pressure * 100)- _vaporPressure;
|
|
||||||
|
|
||||||
_airDensity = (_partialPressure * DRY_AIR_MOLAR_MASS + _vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(_temperature));
|
|
||||||
} else {
|
|
||||||
_airDensity = (_pressure * 100) / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(_temperature));
|
|
||||||
};
|
|
||||||
if (_atmosphereModel == "ICAO") then {
|
|
||||||
_ballisticCoefficient = (STD_AIR_DENSITY_ICAO / _airDensity) * _ballisticCoefficient;
|
|
||||||
} else {
|
|
||||||
_ballisticCoefficient = (STD_AIR_DENSITY_ASM / _airDensity) * _ballisticCoefficient;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
_drag = _deltaT * ([_dragModel, _ballisticCoefficient, _trueSpeed] call FUNC(calculateRetardation));
|
|
||||||
_accel = (vectorNormalized _trueVelocity) vectorMultiply (_drag);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorDiff _accel;
|
|
||||||
} else {
|
|
||||||
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
|
|
||||||
_pressureDeviation = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure) - 1013.25;
|
|
||||||
_temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2);
|
|
||||||
_humidity = EGVAR(weather,currentHumidity);
|
|
||||||
_airFriction = _airFriction + ((_temperature - 15) * 0.0000015 + _humidity * 0.0000040 + _pressureDeviation * -0.0000009);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_airFriction != _airFrictionRef || vectorMagnitude _wind > 0) then {
|
|
||||||
_dragRef = _deltaT * _airFrictionRef * _bulletSpeed * _bulletSpeed;
|
|
||||||
_accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorDiff _accelRef;
|
|
||||||
|
|
||||||
_drag = _deltaT * _airFriction * _trueSpeed * _trueSpeed;
|
|
||||||
_accel = (vectorNormalized _trueVelocity) vectorMultiply (_drag);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (GVAR(CoriolisEnabled) && _bulletSpeedAvg > 0) then {
|
|
||||||
_horizontalDeflection = 0.0000729 * (_unit distanceSqr _bullet) * sin(EGVAR(weather,Latitude)) / _bulletSpeedAvg;
|
|
||||||
_horizontalDeflectionPartial = _horizontalDeflection - (GVAR(bulletDatabaseHDeflect) select _index);
|
|
||||||
GVAR(bulletDatabaseHDeflect) set[_index, _horizontalDeflection];
|
|
||||||
_vect = [sin(_bulletDir + 90) * _horizontalDeflectionPartial, cos(_bulletDir + 90) * _horizontalDeflectionPartial, 0];
|
|
||||||
|
|
||||||
_bulletPosition = _bulletPosition vectorAdd _vect;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
// Negligible effect on the trajectory
|
|
||||||
if (GVAR(EoetvoesEnabled)) then {
|
|
||||||
_centripetalAccel = 2 * 0.0000729 * (_muzzleVelocity / -32.2) * cos(EGVAR(weather,Latitude)) * sin(_bulletDir);
|
|
||||||
_accel = [0, 0, -(_centripetalAccel * _deltaT)];
|
|
||||||
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
|
||||||
};
|
|
||||||
//*/
|
|
||||||
|
|
||||||
if (GVAR(SpinDriftEnabled)) then {
|
|
||||||
_spinDrift = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
|
||||||
_spinDriftPartial = _spinDrift - (GVAR(bulletDatabaseSpinDrift) select _index);
|
|
||||||
GVAR(bulletDatabaseSpinDrift) set[_index, _spinDrift];
|
|
||||||
_vect = [sin(_bulletDir + 90) * _spinDriftPartial, cos(_bulletDir + 90) * _spinDriftPartial, 0];
|
|
||||||
|
|
||||||
_bulletPosition = _bulletPosition vectorAdd _vect;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (GVAR(TransonicRegionEnabled) && _transonicStabilityCoef < 1) then {
|
|
||||||
if (_bulletSpeed < 345 && _bulletSpeedAvg > 340 && _bulletSpeed > 335) then {
|
|
||||||
_accel = [(random 0.8) - 0.4, (random 0.8) - 0.4, (random 0.8) - 0.4];
|
|
||||||
_accel = _accel vectorMultiply (1 - _transonicStabilityCoef);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_bulletTraceVisible && _bulletSpeed > 600 && _bullet distanceSqr _unit > 400) then {
|
|
||||||
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
|
||||||
};
|
|
||||||
|
|
||||||
_bullet setVelocity _bulletVelocity;
|
|
||||||
_bullet setPosASL _bulletPosition;
|
|
||||||
true
|
|
||||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
|
||||||
|
|
||||||
}, GVAR(simulationInterval), []] call CBA_fnc_addPerFrameHandler;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
#define COMPONENT advanced_ballistics
|
#define COMPONENT advanced_ballistics
|
||||||
#include "\z\ace\addons\main\script_mod.hpp"
|
#include "\z\ace\addons\main\script_mod.hpp"
|
||||||
|
|
||||||
#define USE_ADVANCEDBALLISTICS_DLL
|
|
||||||
|
|
||||||
#ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS
|
#ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS
|
||||||
#define DEBUG_MODE_FULL
|
#define DEBUG_MODE_FULL
|
||||||
#endif
|
#endif
|
||||||
|
@ -9,7 +9,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
|
|||||||
GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006400, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ],
|
GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006400, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ],
|
||||||
|
|
||||||
["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003740, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ],
|
["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003740, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ],
|
||||||
["12.7x99mm" , 853, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
|
["12.7x99mm" , 900, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
|
||||||
|
|
||||||
["12.7x54mm" , 300, 100, 0.3395, -0.0001400, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ],
|
["12.7x54mm" , 300, 100, 0.3395, -0.0001400, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ],
|
||||||
|
|
||||||
@ -34,6 +34,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
|
|||||||
|
|
||||||
["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"],
|
["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"],
|
||||||
["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"],
|
["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"],
|
||||||
|
["6.5mm Creedmor" , 840, 100, 0.0637, -0.0006510, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"],
|
||||||
|
|
||||||
["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ],
|
["5.56x45mm 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 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" ],
|
||||||
|
@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then {
|
|||||||
private ["_bulletLength", "_stabilityFactor"];
|
private ["_bulletLength", "_stabilityFactor"];
|
||||||
_bulletLength = 1.8;
|
_bulletLength = 1.8;
|
||||||
_stabilityFactor = 1.5;
|
_stabilityFactor = 1.5;
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
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 / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||||
};
|
};
|
||||||
|
@ -106,7 +106,7 @@ private ["_wind1", "_wind2", "_windDrift"];
|
|||||||
_wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0];
|
_wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0];
|
||||||
_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0];
|
_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0];
|
||||||
_windDrift = 0;
|
_windDrift = 0;
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
_bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection);
|
_bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ _speedAverage = 0;
|
|||||||
|
|
||||||
private ["_eoetvoesMultiplier"];
|
private ["_eoetvoesMultiplier"];
|
||||||
_eoetvoesMultiplier = 0;
|
_eoetvoesMultiplier = 0;
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
_eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire);
|
_eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -142,14 +142,12 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
|
|||||||
_trueSpeed = vectorMagnitude _trueVelocity;
|
_trueSpeed = vectorMagnitude _trueVelocity;
|
||||||
|
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false]) then {
|
|
||||||
_drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then {
|
_drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then {
|
||||||
parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed]))
|
parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed]))
|
||||||
} else {
|
} else {
|
||||||
([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation))
|
([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation))
|
||||||
};
|
};
|
||||||
_bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag);
|
_bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag);
|
||||||
};
|
|
||||||
} else {
|
} else {
|
||||||
_bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction);
|
_bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction);
|
||||||
};
|
};
|
||||||
@ -177,24 +175,21 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
|
|||||||
_kineticEnergy = _kineticEnergy * 0.737562149;
|
_kineticEnergy = _kineticEnergy * 0.737562149;
|
||||||
|
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then {
|
// Coriolis
|
||||||
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
||||||
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
||||||
_windage1 = _windage1 + _horizontalCoriolis;
|
_windage1 = _windage1 + _horizontalCoriolis;
|
||||||
_windage2 = _windage2 + _horizontalCoriolis;
|
_windage2 = _windage2 + _horizontalCoriolis;
|
||||||
};
|
// Eoetvoes
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
|
||||||
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
||||||
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
||||||
_elevation = _elevation + _verticalCoriolis;
|
_elevation = _elevation + _verticalCoriolis;
|
||||||
};
|
// Spin drift
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then {
|
|
||||||
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
||||||
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
||||||
_windage1 = _windage1 + _spinDrift;
|
_windage1 = _windage1 + _spinDrift;
|
||||||
_windage2 = _windage2 + _spinDrift;
|
_windage2 = _windage2 + _spinDrift;
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]];
|
GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]];
|
||||||
_n = _n + 1;
|
_n = _n + 1;
|
||||||
@ -217,23 +212,20 @@ _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2));
|
|||||||
_kineticEnergy = _kineticEnergy * 0.737562149;
|
_kineticEnergy = _kineticEnergy * 0.737562149;
|
||||||
|
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then {
|
// Coriolis
|
||||||
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
||||||
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
||||||
_windage1 = _windage1 + _horizontalCoriolis;
|
_windage1 = _windage1 + _horizontalCoriolis;
|
||||||
_windage2 = _windage2 + _horizontalCoriolis;
|
_windage2 = _windage2 + _horizontalCoriolis;
|
||||||
};
|
// Eoetvoes
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
|
||||||
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
||||||
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
||||||
_elevation = _elevation + _verticalCoriolis;
|
_elevation = _elevation + _verticalCoriolis;
|
||||||
};
|
// Spin drift
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then {
|
|
||||||
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
||||||
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
||||||
_windage1 = _windage1 + _spinDrift;
|
_windage1 = _windage1 + _spinDrift;
|
||||||
_windage2 = _windage2 + _spinDrift;
|
_windage2 = _windage2 + _spinDrift;
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60]
|
[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60]
|
||||||
|
@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then {
|
|||||||
private ["_bulletLength", "_stabilityFactor"];
|
private ["_bulletLength", "_stabilityFactor"];
|
||||||
_bulletLength = 1.8;
|
_bulletLength = 1.8;
|
||||||
_stabilityFactor = 1.5;
|
_stabilityFactor = 1.5;
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
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 / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||||
};
|
};
|
||||||
|
@ -60,7 +60,7 @@ private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifl
|
|||||||
_boreHeight = parseNumber(ctrlText 120000);
|
_boreHeight = parseNumber(ctrlText 120000);
|
||||||
_bulletMass = parseNumber(ctrlText 120010);
|
_bulletMass = parseNumber(ctrlText 120010);
|
||||||
_bulletDiameter = parseNumber(ctrlText 120020);
|
_bulletDiameter = parseNumber(ctrlText 120020);
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
_airFriction = 0.1 max parseNumber(ctrlText 120030) min 2;
|
_airFriction = 0.1 max parseNumber(ctrlText 120030) min 2;
|
||||||
} else {
|
} else {
|
||||||
_airFriction = parseNumber(ctrlText 120030) / -1000;
|
_airFriction = parseNumber(ctrlText 120030) / -1000;
|
||||||
@ -87,7 +87,7 @@ GVAR(workingMemory) set [5, _boreHeight];
|
|||||||
GVAR(workingMemory) set [12, _bulletMass];
|
GVAR(workingMemory) set [12, _bulletMass];
|
||||||
GVAR(workingMemory) set [13, _bulletDiameter];
|
GVAR(workingMemory) set [13, _bulletDiameter];
|
||||||
GVAR(workingMemory) set [14, _rifleTwist];
|
GVAR(workingMemory) set [14, _rifleTwist];
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
GVAR(workingMemory) set [15, _airFriction];
|
GVAR(workingMemory) set [15, _airFriction];
|
||||||
} else {
|
} else {
|
||||||
GVAR(workingMemory) set [4, _airFriction];
|
GVAR(workingMemory) set [4, _airFriction];
|
||||||
|
@ -26,7 +26,7 @@ if (GVAR(currentUnit) != 2) then {
|
|||||||
} else {
|
} else {
|
||||||
ctrlSetText [110, Str(Round(GVAR(workingMemory) select 12))];
|
ctrlSetText [110, Str(Round(GVAR(workingMemory) select 12))];
|
||||||
};
|
};
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
||||||
} else {
|
} else {
|
||||||
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
||||||
|
@ -32,7 +32,7 @@ if (GVAR(currentUnit) != 2) then {
|
|||||||
} else {
|
} else {
|
||||||
ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) * 1000) / 1000)];
|
ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) * 1000) / 1000)];
|
||||||
};
|
};
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
||||||
} else {
|
} else {
|
||||||
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
||||||
|
@ -11,4 +11,4 @@
|
|||||||
|
|
||||||
#include "\z\ace\addons\main\script_macros.hpp"
|
#include "\z\ace\addons\main\script_macros.hpp"
|
||||||
|
|
||||||
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.2
|
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.3
|
||||||
|
@ -23,6 +23,8 @@ class CfgAmmo {
|
|||||||
airFriction=-0.001265;
|
airFriction=-0.001265;
|
||||||
hit=8;
|
hit=8;
|
||||||
typicalSpeed=750;
|
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_caliber=0.224;
|
||||||
ACE_bulletLength=0.906;
|
ACE_bulletLength=0.906;
|
||||||
ACE_bulletMass=62;
|
ACE_bulletMass=62;
|
||||||
@ -36,7 +38,7 @@ class CfgAmmo {
|
|||||||
};
|
};
|
||||||
class ACE_556x45_Ball_Mk262 : B_556x45_Ball {
|
class ACE_556x45_Ball_Mk262 : B_556x45_Ball {
|
||||||
airFriction=-0.001125;
|
airFriction=-0.001125;
|
||||||
caliber=0.6;
|
caliber=0.8;
|
||||||
deflecting=18;
|
deflecting=18;
|
||||||
hit=11;
|
hit=11;
|
||||||
typicalSpeed=836;
|
typicalSpeed=836;
|
||||||
@ -53,7 +55,7 @@ class CfgAmmo {
|
|||||||
};
|
};
|
||||||
class ACE_556x45_Ball_Mk318 : B_556x45_Ball {
|
class ACE_556x45_Ball_Mk318 : B_556x45_Ball {
|
||||||
airFriction=-0.001120;
|
airFriction=-0.001120;
|
||||||
caliber=0.6;
|
caliber=0.8;
|
||||||
deflecting=18;
|
deflecting=18;
|
||||||
hit=9;
|
hit=9;
|
||||||
typicalSpeed=886;
|
typicalSpeed=886;
|
||||||
@ -68,13 +70,30 @@ class CfgAmmo {
|
|||||||
ACE_muzzleVelocities[]={780, 886, 950};
|
ACE_muzzleVelocities[]={780, 886, 950};
|
||||||
ACE_barrelLengths[]={10, 15.5, 20};
|
ACE_barrelLengths[]={10, 15.5, 20};
|
||||||
};
|
};
|
||||||
|
class ACE_556x45_Ball_M995_AP : B_556x45_Ball {
|
||||||
|
airFriction=-0.001120;
|
||||||
|
caliber=1.6;
|
||||||
|
deflecting=18;
|
||||||
|
hit=6;
|
||||||
|
typicalSpeed=886;
|
||||||
|
ACE_caliber=0.224;
|
||||||
|
ACE_bulletLength=0.906;
|
||||||
|
ACE_bulletMass=46;
|
||||||
|
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||||
|
ACE_ballisticCoefficients[]={0.151};
|
||||||
|
ACE_velocityBoundaries[]={};
|
||||||
|
ACE_standardAtmosphere="ASM";
|
||||||
|
ACE_dragModel=7;
|
||||||
|
ACE_muzzleVelocities[]={950, 1030, 1040};
|
||||||
|
ACE_barrelLengths[]={10, 15.5, 20};
|
||||||
|
};
|
||||||
class B_556x45_Ball_Tracer_Red;
|
class B_556x45_Ball_Tracer_Red;
|
||||||
class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red {
|
class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red {
|
||||||
nvgOnly = 1;
|
nvgOnly = 1;
|
||||||
};
|
};
|
||||||
class ACE_545x39_Ball_7N6M : B_556x45_Ball {
|
class ACE_545x39_Ball_7N6M : B_556x45_Ball {
|
||||||
airFriction=-0.001162;
|
airFriction=-0.001162;
|
||||||
caliber=0.5;
|
caliber=0.6;
|
||||||
deflecting=18;
|
deflecting=18;
|
||||||
hit=7;
|
hit=7;
|
||||||
typicalSpeed=880;
|
typicalSpeed=880;
|
||||||
@ -89,13 +108,15 @@ class CfgAmmo {
|
|||||||
ACE_muzzleVelocities[]={780, 880, 920};
|
ACE_muzzleVelocities[]={780, 880, 920};
|
||||||
ACE_barrelLengths[]={10, 16.3, 20};
|
ACE_barrelLengths[]={10, 16.3, 20};
|
||||||
};
|
};
|
||||||
class B_556x45_Ball_Tracer_Yellow;
|
class B_556x45_Ball_Tracer_Green;
|
||||||
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Yellow {
|
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green {
|
||||||
airFriction=-0.001162;
|
airFriction=-0.001162;
|
||||||
caliber=0.5;
|
caliber=0.6;
|
||||||
deflecting=18;
|
deflecting=18;
|
||||||
hit=7;
|
hit=7;
|
||||||
typicalSpeed=883;
|
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_caliber=0.220;
|
||||||
ACE_bulletLength=0.85;
|
ACE_bulletLength=0.85;
|
||||||
ACE_bulletMass=49.8;
|
ACE_bulletMass=49.8;
|
||||||
@ -132,7 +153,7 @@ class CfgAmmo {
|
|||||||
class ACE_65x47_Ball_Scenar: B_65x39_Caseless {
|
class ACE_65x47_Ball_Scenar: B_65x39_Caseless {
|
||||||
airFriction=-0.00078;
|
airFriction=-0.00078;
|
||||||
typicalSpeed=820 ;
|
typicalSpeed=820 ;
|
||||||
caliber=0.6;
|
caliber=0.9;
|
||||||
ACE_caliber=0.264;
|
ACE_caliber=0.264;
|
||||||
ACE_bulletLength=1.364;
|
ACE_bulletLength=1.364;
|
||||||
ACE_bulletMass=139;
|
ACE_bulletMass=139;
|
||||||
@ -145,9 +166,9 @@ class CfgAmmo {
|
|||||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||||
};
|
};
|
||||||
class ACE_65_Creedmor_Ball: B_65x39_Caseless {
|
class ACE_65_Creedmor_Ball: B_65x39_Caseless {
|
||||||
airFriction=-0.00078;
|
airFriction=-0.000651;
|
||||||
typicalSpeed=860 ;
|
typicalSpeed=860 ;
|
||||||
caliber=0.7;
|
caliber=1.1;
|
||||||
ACE_caliber=0.264;
|
ACE_caliber=0.264;
|
||||||
ACE_bulletLength=1.426;
|
ACE_bulletLength=1.426;
|
||||||
ACE_bulletMass=140;
|
ACE_bulletMass=140;
|
||||||
@ -156,13 +177,15 @@ class CfgAmmo {
|
|||||||
ACE_velocityBoundaries[]={};
|
ACE_velocityBoundaries[]={};
|
||||||
ACE_standardAtmosphere="ICAO";
|
ACE_standardAtmosphere="ICAO";
|
||||||
ACE_dragModel=7;
|
ACE_dragModel=7;
|
||||||
ACE_muzzleVelocities[]={750, 830, 850, 860, 865};
|
ACE_muzzleVelocities[]={750, 820, 840, 852, 860};
|
||||||
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
ACE_barrelLengths[]={10, 16, 20, 24, 26};
|
||||||
};
|
};
|
||||||
class B_762x51_Ball : BulletBase {
|
class B_762x51_Ball : BulletBase {
|
||||||
airFriction=-0.001035;
|
airFriction=-0.001035;
|
||||||
typicalSpeed=833;
|
typicalSpeed=833;
|
||||||
hit=9;
|
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_caliber=0.308;
|
||||||
ACE_bulletLength=1.14;
|
ACE_bulletLength=1.14;
|
||||||
ACE_bulletMass=146;
|
ACE_bulletMass=146;
|
||||||
@ -180,7 +203,7 @@ class CfgAmmo {
|
|||||||
};
|
};
|
||||||
class ACE_762x51_Ball_M118LR : B_762x51_Ball {
|
class ACE_762x51_Ball_M118LR : B_762x51_Ball {
|
||||||
airFriction=-0.0008525;
|
airFriction=-0.0008525;
|
||||||
caliber=1.05;
|
caliber=1.8;
|
||||||
hit=16;
|
hit=16;
|
||||||
typicalSpeed=790;
|
typicalSpeed=790;
|
||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
@ -194,11 +217,27 @@ class CfgAmmo {
|
|||||||
ACE_muzzleVelocities[]={750, 780, 790, 794};
|
ACE_muzzleVelocities[]={750, 780, 790, 794};
|
||||||
ACE_barrelLengths[]={16, 20, 24, 26};
|
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||||
};
|
};
|
||||||
|
class ACE_762x51_Ball_Mk316_Mod_0 : B_762x51_Ball {
|
||||||
|
airFriction=-0.0008525;
|
||||||
|
caliber=1.8;
|
||||||
|
hit=16;
|
||||||
|
typicalSpeed=790;
|
||||||
|
ACE_caliber=0.308;
|
||||||
|
ACE_bulletLength=1.24;
|
||||||
|
ACE_bulletMass=175;
|
||||||
|
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||||
|
ACE_ballisticCoefficients[]={0.243};
|
||||||
|
ACE_velocityBoundaries[]={};
|
||||||
|
ACE_standardAtmosphere="ICAO";
|
||||||
|
ACE_dragModel=7;
|
||||||
|
ACE_muzzleVelocities[]={775, 790, 805, 810};
|
||||||
|
ACE_barrelLengths[]={16, 20, 24, 26};
|
||||||
|
};
|
||||||
class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball {
|
class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball {
|
||||||
airFriction=-0.00103;
|
airFriction=-0.00103;
|
||||||
caliber=0.85;
|
caliber=1.5;
|
||||||
hit=14;
|
hit=14;
|
||||||
typicalSpeed=890;
|
typicalSpeed=900;
|
||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
ACE_bulletLength=1.24;
|
ACE_bulletLength=1.24;
|
||||||
ACE_bulletMass=130;
|
ACE_bulletMass=130;
|
||||||
@ -210,11 +249,27 @@ class CfgAmmo {
|
|||||||
ACE_muzzleVelocities[]={838, 892, 910};
|
ACE_muzzleVelocities[]={838, 892, 910};
|
||||||
ACE_barrelLengths[]={13, 16, 20};
|
ACE_barrelLengths[]={13, 16, 20};
|
||||||
};
|
};
|
||||||
|
class ACE_762x51_Ball_M993_AP : B_762x51_Ball {
|
||||||
|
airFriction=-0.00103;
|
||||||
|
caliber=2.2;
|
||||||
|
hit=11;
|
||||||
|
typicalSpeed=930;
|
||||||
|
ACE_caliber=0.308;
|
||||||
|
ACE_bulletLength=1.24;
|
||||||
|
ACE_bulletMass=127;
|
||||||
|
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||||
|
ACE_ballisticCoefficients[]={0.377};
|
||||||
|
ACE_velocityBoundaries[]={};
|
||||||
|
ACE_standardAtmosphere="ICAO";
|
||||||
|
ACE_dragModel=1;
|
||||||
|
ACE_muzzleVelocities[]={875, 910, 930};
|
||||||
|
ACE_barrelLengths[]={13, 16, 20};
|
||||||
|
};
|
||||||
class ACE_762x51_Ball_Subsonic : B_762x51_Ball {
|
class ACE_762x51_Ball_Subsonic : B_762x51_Ball {
|
||||||
airFriction=-0.000535;
|
airFriction=-0.000535;
|
||||||
caliber=0.5;
|
caliber=1;
|
||||||
hit=6;
|
hit=6;
|
||||||
typicalSpeed=790;
|
typicalSpeed=320;
|
||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
ACE_bulletLength=1.340;
|
ACE_bulletLength=1.340;
|
||||||
ACE_bulletMass=200;
|
ACE_bulletMass=200;
|
||||||
@ -229,7 +284,7 @@ class CfgAmmo {
|
|||||||
class ACE_30_06_M1_Ball : B_762x51_Ball {
|
class ACE_30_06_M1_Ball : B_762x51_Ball {
|
||||||
airFriction=-0.0009;
|
airFriction=-0.0009;
|
||||||
typicalSpeed=800;
|
typicalSpeed=800;
|
||||||
caliber=1.3;
|
caliber=2.0;
|
||||||
hit=10;
|
hit=10;
|
||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
ACE_bulletLength=1.21;
|
ACE_bulletLength=1.21;
|
||||||
@ -245,7 +300,7 @@ class CfgAmmo {
|
|||||||
class ACE_7_Remington_Magnum_Ball : B_762x51_Ball {
|
class ACE_7_Remington_Magnum_Ball : B_762x51_Ball {
|
||||||
airFriction=-0.0008;
|
airFriction=-0.0008;
|
||||||
typicalSpeed=820;
|
typicalSpeed=820;
|
||||||
caliber=1.4;
|
caliber=2.1;
|
||||||
hit=8;
|
hit=8;
|
||||||
ACE_caliber=0.284;
|
ACE_caliber=0.284;
|
||||||
ACE_bulletLength=1.529;
|
ACE_bulletLength=1.529;
|
||||||
@ -261,7 +316,7 @@ class CfgAmmo {
|
|||||||
class ACE_243_Winchester_Ball : B_762x51_Ball {
|
class ACE_243_Winchester_Ball : B_762x51_Ball {
|
||||||
airFriction=-0.00095;
|
airFriction=-0.00095;
|
||||||
typicalSpeed=915;
|
typicalSpeed=915;
|
||||||
caliber=0.8;
|
caliber=2.3;
|
||||||
hit=6;
|
hit=6;
|
||||||
ACE_caliber=0.243;
|
ACE_caliber=0.243;
|
||||||
ACE_bulletLength=1.282;
|
ACE_bulletLength=1.282;
|
||||||
@ -276,13 +331,13 @@ class CfgAmmo {
|
|||||||
};
|
};
|
||||||
class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball {
|
class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball {
|
||||||
airFriction=-0.000830;
|
airFriction=-0.000830;
|
||||||
caliber=1.08;
|
caliber=1.8;
|
||||||
hit=17;
|
hit=17;
|
||||||
typicalSpeed=900;
|
typicalSpeed=900;
|
||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
ACE_bulletLength=1.353;
|
ACE_bulletLength=1.353;
|
||||||
ACE_bulletMass=190;
|
ACE_bulletMass=190;
|
||||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||||
ACE_ballisticCoefficients[]={0.268};
|
ACE_ballisticCoefficients[]={0.268};
|
||||||
ACE_velocityBoundaries[]={};
|
ACE_velocityBoundaries[]={};
|
||||||
ACE_standardAtmosphere="ICAO";
|
ACE_standardAtmosphere="ICAO";
|
||||||
@ -292,13 +347,13 @@ class CfgAmmo {
|
|||||||
};
|
};
|
||||||
class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball {
|
class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball {
|
||||||
airFriction=-0.000815;
|
airFriction=-0.000815;
|
||||||
caliber=1.12;
|
caliber=1.9;
|
||||||
hit=18;
|
hit=18;
|
||||||
typicalSpeed=867;
|
typicalSpeed=867;
|
||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
ACE_bulletLength=1.489;
|
ACE_bulletLength=1.489;
|
||||||
ACE_bulletMass=220;
|
ACE_bulletMass=220;
|
||||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||||
ACE_ballisticCoefficients[]={0.310};
|
ACE_ballisticCoefficients[]={0.310};
|
||||||
ACE_velocityBoundaries[]={};
|
ACE_velocityBoundaries[]={};
|
||||||
ACE_standardAtmosphere="ICAO";
|
ACE_standardAtmosphere="ICAO";
|
||||||
@ -308,7 +363,7 @@ class CfgAmmo {
|
|||||||
};
|
};
|
||||||
class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball {
|
class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball {
|
||||||
airFriction=-0.00076;
|
airFriction=-0.00076;
|
||||||
caliber=1.15;
|
caliber=2.0;
|
||||||
hit=19;
|
hit=19;
|
||||||
typicalSpeed=853;
|
typicalSpeed=853;
|
||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
@ -338,7 +393,7 @@ class CfgAmmo {
|
|||||||
};
|
};
|
||||||
class ACE_762x54_Ball_7N14 : B_762x51_Ball {
|
class ACE_762x54_Ball_7N14 : B_762x51_Ball {
|
||||||
airFriction=-0.001023;
|
airFriction=-0.001023;
|
||||||
caliber=0.95;
|
caliber=1.5;
|
||||||
hit=15;
|
hit=15;
|
||||||
typicalSpeed=820;
|
typicalSpeed=820;
|
||||||
ACE_caliber=0.312;
|
ACE_caliber=0.312;
|
||||||
@ -355,9 +410,11 @@ class CfgAmmo {
|
|||||||
class B_762x54_Tracer_Green;
|
class B_762x54_Tracer_Green;
|
||||||
class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green {
|
class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green {
|
||||||
airFriction=-0.001023;
|
airFriction=-0.001023;
|
||||||
caliber=0.9;
|
caliber=1.5;
|
||||||
hit=15;
|
hit=15;
|
||||||
typicalSpeed=800;
|
typicalSpeed=800;
|
||||||
|
tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds
|
||||||
|
tracerEndTime = 3;
|
||||||
ACE_caliber=0.312;
|
ACE_caliber=0.312;
|
||||||
ACE_bulletLength=1.14;
|
ACE_bulletLength=1.14;
|
||||||
ACE_bulletMass=149;
|
ACE_bulletMass=149;
|
||||||
@ -371,7 +428,7 @@ class CfgAmmo {
|
|||||||
};
|
};
|
||||||
class ACE_762x35_Ball : B_762x51_Ball {
|
class ACE_762x35_Ball : B_762x51_Ball {
|
||||||
airFriction=-0.000821;
|
airFriction=-0.000821;
|
||||||
caliber=0.9;
|
caliber=1.5;
|
||||||
hit=11;
|
hit=11;
|
||||||
typicalSpeed=790;
|
typicalSpeed=790;
|
||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
@ -388,6 +445,7 @@ class CfgAmmo {
|
|||||||
class ACE_762x39_Ball : B_762x51_Ball {
|
class ACE_762x39_Ball : B_762x51_Ball {
|
||||||
airFriction=-0.0015168;
|
airFriction=-0.0015168;
|
||||||
hit=12;
|
hit=12;
|
||||||
|
caliber=1.5;
|
||||||
typicalSpeed=716;
|
typicalSpeed=716;
|
||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
ACE_bulletLength=1.14;
|
ACE_bulletLength=1.14;
|
||||||
@ -400,10 +458,13 @@ class CfgAmmo {
|
|||||||
ACE_muzzleVelocities[]={650, 716, 750};
|
ACE_muzzleVelocities[]={650, 716, 750};
|
||||||
ACE_barrelLengths[]={10, 16.3, 20};
|
ACE_barrelLengths[]={10, 16.3, 20};
|
||||||
};
|
};
|
||||||
class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Yellow {
|
class ACE_762x39_Ball_57N231P : B_762x54_Tracer_Green {
|
||||||
airFriction=-0.0015168;
|
airFriction=-0.0015168;
|
||||||
hit=12;
|
hit=12;
|
||||||
|
caliber=1.5;
|
||||||
typicalSpeed=716;
|
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_caliber=0.308;
|
||||||
ACE_bulletLength=1.14;
|
ACE_bulletLength=1.14;
|
||||||
ACE_bulletMass=117;
|
ACE_bulletMass=117;
|
||||||
@ -493,6 +554,7 @@ class CfgAmmo {
|
|||||||
class ACE_303_Ball : ACE_762x51_Ball_M118LR {
|
class ACE_303_Ball : ACE_762x51_Ball_M118LR {
|
||||||
airFriction=-0.00083;
|
airFriction=-0.00083;
|
||||||
typicalSpeed=761;
|
typicalSpeed=761;
|
||||||
|
caliber=2.0;
|
||||||
ACE_caliber=0.311;
|
ACE_caliber=0.311;
|
||||||
ACE_bulletLength=1.227;
|
ACE_bulletLength=1.227;
|
||||||
ACE_bulletMass=174;
|
ACE_bulletMass=174;
|
||||||
@ -510,7 +572,6 @@ class CfgAmmo {
|
|||||||
ACE_caliber=0.366;
|
ACE_caliber=0.366;
|
||||||
ACE_bulletLength=1.350;
|
ACE_bulletLength=1.350;
|
||||||
ACE_bulletMass=230;
|
ACE_bulletMass=230;
|
||||||
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_ammoTempMuzzleVelocityShifts[]={-26.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_ballisticCoefficients[]={0.368};
|
||||||
ACE_velocityBoundaries[]={};
|
ACE_velocityBoundaries[]={};
|
||||||
@ -580,7 +641,6 @@ class CfgAmmo {
|
|||||||
class ACE_338_Ball : B_338_Ball {
|
class ACE_338_Ball : B_338_Ball {
|
||||||
timeToLive=10;
|
timeToLive=10;
|
||||||
airFriction=-0.000535;
|
airFriction=-0.000535;
|
||||||
caliber=1.55;
|
|
||||||
typicalSpeed=826;
|
typicalSpeed=826;
|
||||||
ACE_caliber=0.338;
|
ACE_caliber=0.338;
|
||||||
ACE_bulletLength=1.70;
|
ACE_bulletLength=1.70;
|
||||||
@ -596,7 +656,7 @@ class CfgAmmo {
|
|||||||
class ACE_338_Ball_API526 : B_338_Ball {
|
class ACE_338_Ball_API526 : B_338_Ball {
|
||||||
timeToLive=10;
|
timeToLive=10;
|
||||||
airFriction=-0.000673;
|
airFriction=-0.000673;
|
||||||
caliber=2.4;
|
caliber=2.8;
|
||||||
typicalSpeed=826;
|
typicalSpeed=826;
|
||||||
ACE_caliber=0.338;
|
ACE_caliber=0.338;
|
||||||
ACE_bulletLength=1.535;
|
ACE_bulletLength=1.535;
|
||||||
@ -626,7 +686,7 @@ class CfgAmmo {
|
|||||||
class B_127x99_Ball : BulletBase {
|
class B_127x99_Ball : BulletBase {
|
||||||
timeToLive=10;
|
timeToLive=10;
|
||||||
airFriction=-0.0006;
|
airFriction=-0.0006;
|
||||||
typicalSpeed=853;
|
typicalSpeed=900;
|
||||||
ACE_caliber=0.510;
|
ACE_caliber=0.510;
|
||||||
ACE_bulletLength=2.310;
|
ACE_bulletLength=2.310;
|
||||||
ACE_bulletMass=647;
|
ACE_bulletMass=647;
|
||||||
@ -635,13 +695,31 @@ class CfgAmmo {
|
|||||||
ACE_velocityBoundaries[]={};
|
ACE_velocityBoundaries[]={};
|
||||||
ACE_standardAtmosphere="ASM";
|
ACE_standardAtmosphere="ASM";
|
||||||
ACE_dragModel=1;
|
ACE_dragModel=1;
|
||||||
ACE_muzzleVelocities[]={853};
|
ACE_muzzleVelocities[]={900};
|
||||||
|
ACE_barrelLengths[]={29};
|
||||||
|
};
|
||||||
|
class ACE_127x99_API : BulletBase {
|
||||||
|
timeToLive=10;
|
||||||
|
airFriction=-0.0006;
|
||||||
|
typicalSpeed=900;
|
||||||
|
hit=25;
|
||||||
|
caliber=4.0;
|
||||||
|
ACE_caliber=0.510;
|
||||||
|
ACE_bulletLength=2.310;
|
||||||
|
ACE_bulletMass=648;
|
||||||
|
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||||
|
ACE_ballisticCoefficients[]={0.670};
|
||||||
|
ACE_velocityBoundaries[]={};
|
||||||
|
ACE_standardAtmosphere="ASM";
|
||||||
|
ACE_dragModel=1;
|
||||||
|
ACE_muzzleVelocities[]={900};
|
||||||
ACE_barrelLengths[]={29};
|
ACE_barrelLengths[]={29};
|
||||||
};
|
};
|
||||||
class ACE_127x99_Ball_AMAX : B_127x99_Ball {
|
class ACE_127x99_Ball_AMAX : B_127x99_Ball {
|
||||||
timeToLive=10;
|
timeToLive=10;
|
||||||
airFriction=-0.000374;
|
airFriction=-0.000374;
|
||||||
typicalSpeed=860;
|
typicalSpeed=860;
|
||||||
|
caliber=3.0;
|
||||||
ACE_caliber=0.510;
|
ACE_caliber=0.510;
|
||||||
ACE_bulletLength=2.540;
|
ACE_bulletLength=2.540;
|
||||||
ACE_bulletMass=750;
|
ACE_bulletMass=750;
|
||||||
|
@ -49,6 +49,14 @@ class CfgMagazines {
|
|||||||
|
|
||||||
class 30Rnd_556x45_Stanag: CA_Magazine {
|
class 30Rnd_556x45_Stanag: CA_Magazine {
|
||||||
};
|
};
|
||||||
|
class ACE_30Rnd_556x45_Stanag_M995_AP_mag: 30Rnd_556x45_Stanag {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
|
ammo = "ACE_556x45_Ball_M995_AP";
|
||||||
|
displayName = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Name";
|
||||||
|
displayNameShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_NameShort";
|
||||||
|
descriptionShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Description";
|
||||||
|
initSpeed = 1046;
|
||||||
|
};
|
||||||
class ACE_30Rnd_556x45_Stanag_Mk262_mag: 30Rnd_556x45_Stanag {
|
class ACE_30Rnd_556x45_Stanag_Mk262_mag: 30Rnd_556x45_Stanag {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
ammo = "ACE_556x45_Ball_Mk262";
|
ammo = "ACE_556x45_Ball_Mk262";
|
||||||
@ -123,6 +131,15 @@ class CfgMagazines {
|
|||||||
descriptionShort = "$STR_ACE_10Rnd_762x51_M118LR_Mag_Description";
|
descriptionShort = "$STR_ACE_10Rnd_762x51_M118LR_Mag_Description";
|
||||||
initSpeed = 780;
|
initSpeed = 780;
|
||||||
};
|
};
|
||||||
|
class ACE_10Rnd_762x51_Mk316_Mod_0_Mag: 10Rnd_762x51_Mag {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
|
ammo = "ACE_762x51_Ball_Mk316_Mod_0";
|
||||||
|
count = 10;
|
||||||
|
displayName = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Name";
|
||||||
|
displayNameShort = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_NameShort";
|
||||||
|
descriptionShort = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Description";
|
||||||
|
initSpeed = 790;
|
||||||
|
};
|
||||||
class ACE_10Rnd_762x51_Mk319_Mod_0_Mag: 10Rnd_762x51_Mag {
|
class ACE_10Rnd_762x51_Mk319_Mod_0_Mag: 10Rnd_762x51_Mag {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
ammo = "ACE_762x51_Ball_Mk319_Mod_0";
|
ammo = "ACE_762x51_Ball_Mk319_Mod_0";
|
||||||
@ -132,6 +149,15 @@ class CfgMagazines {
|
|||||||
descriptionShort = "$STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Description";
|
descriptionShort = "$STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Description";
|
||||||
initSpeed = 900;
|
initSpeed = 900;
|
||||||
};
|
};
|
||||||
|
class ACE_10Rnd_762x51_M993_AP_Mag: 10Rnd_762x51_Mag {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
|
ammo = "ACE_762x51_Ball_M993_AP";
|
||||||
|
count = 10;
|
||||||
|
displayName = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_Name";
|
||||||
|
displayNameShort = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_NameShort";
|
||||||
|
descriptionShort = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_Description";
|
||||||
|
initSpeed = 920;
|
||||||
|
};
|
||||||
class ACE_20Rnd_762x51_M118LR_Mag: 20Rnd_762x51_Mag {
|
class ACE_20Rnd_762x51_M118LR_Mag: 20Rnd_762x51_Mag {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
ammo = "ACE_762x51_Ball_M118LR";
|
ammo = "ACE_762x51_Ball_M118LR";
|
||||||
@ -140,6 +166,15 @@ class CfgMagazines {
|
|||||||
descriptionShort = "$STR_ACE_20Rnd_762x51_M118LR_Mag_Description";
|
descriptionShort = "$STR_ACE_20Rnd_762x51_M118LR_Mag_Description";
|
||||||
initSpeed = 780;
|
initSpeed = 780;
|
||||||
};
|
};
|
||||||
|
class ACE_20Rnd_762x51_Mk316_Mod_0_Mag: 20Rnd_762x51_Mag {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
|
ammo = "ACE_762x51_Ball_Mk316_Mod_0";
|
||||||
|
count = 20;
|
||||||
|
displayName = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Name";
|
||||||
|
displayNameShort = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_NameShort";
|
||||||
|
descriptionShort = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Description";
|
||||||
|
initSpeed = 790;
|
||||||
|
};
|
||||||
class ACE_20Rnd_762x51_Mk319_Mod_0_Mag: 20Rnd_762x51_Mag {
|
class ACE_20Rnd_762x51_Mk319_Mod_0_Mag: 20Rnd_762x51_Mag {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
ammo = "ACE_762x51_Ball_Mk319_Mod_0";
|
ammo = "ACE_762x51_Ball_Mk319_Mod_0";
|
||||||
@ -148,6 +183,15 @@ class CfgMagazines {
|
|||||||
descriptionShort = "$STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Description";
|
descriptionShort = "$STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Description";
|
||||||
initSpeed = 900;
|
initSpeed = 900;
|
||||||
};
|
};
|
||||||
|
class ACE_20Rnd_762x51_M993_AP_Mag: 20Rnd_762x51_Mag {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
|
ammo = "ACE_762x51_Ball_M993_AP";
|
||||||
|
count = 20;
|
||||||
|
displayName = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_Name";
|
||||||
|
displayNameShort = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_NameShort";
|
||||||
|
descriptionShort = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_Description";
|
||||||
|
initSpeed = 920;
|
||||||
|
};
|
||||||
class ACE_20Rnd_762x67_Mk248_Mod_0_Mag: 20Rnd_762x51_Mag {
|
class ACE_20Rnd_762x67_Mk248_Mod_0_Mag: 20Rnd_762x51_Mag {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
ammo = "ACE_762x67_Ball_Mk248_Mod_0";
|
ammo = "ACE_762x67_Ball_Mk248_Mod_0";
|
||||||
@ -211,7 +255,15 @@ class CfgMagazines {
|
|||||||
displayName = "$STR_ACE_5Rnd_127x99_Mag_Name";
|
displayName = "$STR_ACE_5Rnd_127x99_Mag_Name";
|
||||||
displayNameShort = "$STR_ACE_5Rnd_127x99_Mag_NameShort";
|
displayNameShort = "$STR_ACE_5Rnd_127x99_Mag_NameShort";
|
||||||
descriptionShort = "$STR_ACE_5Rnd_127x99_Mag_Description";
|
descriptionShort = "$STR_ACE_5Rnd_127x99_Mag_Description";
|
||||||
initSpeed = 853;
|
initSpeed = 900;
|
||||||
|
};
|
||||||
|
class ACE_5Rnd_127x99_API_Mag: 5Rnd_127x108_Mag {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
|
ammo = "ACE_127x99_API";
|
||||||
|
displayName = "$STR_ACE_5Rnd_127x99_API_Mag_Name";
|
||||||
|
displayNameShort = "$STR_ACE_5Rnd_127x99_API_Mag_NameShort";
|
||||||
|
descriptionShort = "$STR_ACE_5Rnd_127x99_API_Mag_Description";
|
||||||
|
initSpeed = 900;
|
||||||
};
|
};
|
||||||
class ACE_5Rnd_127x99_AMAX_Mag: 5Rnd_127x108_Mag {
|
class ACE_5Rnd_127x99_AMAX_Mag: 5Rnd_127x108_Mag {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
|
@ -27,6 +27,7 @@ class CfgVehicles {
|
|||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -37,12 +38,15 @@ class CfgVehicles {
|
|||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -51,13 +55,18 @@ class CfgVehicles {
|
|||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M993_AP_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -69,6 +78,8 @@ class CfgVehicles {
|
|||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||||
@ -106,7 +117,6 @@ class CfgVehicles {
|
|||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,6);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,6);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
|
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -114,6 +124,7 @@ class CfgVehicles {
|
|||||||
class IND_Box_Base;
|
class IND_Box_Base;
|
||||||
class Box_IND_Wps_F: IND_Box_Base {
|
class Box_IND_Wps_F: IND_Box_Base {
|
||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||||
};
|
};
|
||||||
@ -127,6 +138,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class Box_IND_Ammo_F: IND_Box_Base {
|
class Box_IND_Ammo_F: IND_Box_Base {
|
||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||||
};
|
};
|
||||||
@ -135,6 +147,7 @@ class CfgVehicles {
|
|||||||
class FIA_Box_Base_F;
|
class FIA_Box_Base_F;
|
||||||
class Box_FIA_Wps_F: FIA_Box_Base_F {
|
class Box_FIA_Wps_F: FIA_Box_Base_F {
|
||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||||
};
|
};
|
||||||
@ -142,6 +155,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class Box_FIA_Ammo_F: FIA_Box_Base_F {
|
class Box_FIA_Ammo_F: FIA_Box_Base_F {
|
||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||||
};
|
};
|
||||||
@ -149,6 +163,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class I_supplyCrate_F: B_supplyCrate_F {
|
class I_supplyCrate_F: B_supplyCrate_F {
|
||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||||
};
|
};
|
||||||
@ -156,6 +171,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class IG_supplyCrate_F: ReammoBox_F {
|
class IG_supplyCrate_F: ReammoBox_F {
|
||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||||
};
|
};
|
||||||
@ -176,8 +192,12 @@ class CfgVehicles {
|
|||||||
author = "$STR_ACE_Common_ACETeam";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M993_AP_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||||
@ -185,6 +205,7 @@ class CfgVehicles {
|
|||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_1_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_1_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,4);
|
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,4);
|
||||||
@ -197,6 +218,7 @@ class CfgVehicles {
|
|||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -382,6 +382,7 @@ class CfgWeapons {
|
|||||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||||
|
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||||
@ -401,6 +402,7 @@ class CfgWeapons {
|
|||||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||||
|
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||||
@ -415,6 +417,7 @@ class CfgWeapons {
|
|||||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||||
|
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||||
@ -429,6 +432,7 @@ class CfgWeapons {
|
|||||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||||
|
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||||
@ -449,6 +453,7 @@ class CfgWeapons {
|
|||||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||||
|
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||||
@ -463,6 +468,7 @@ class CfgWeapons {
|
|||||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||||
|
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||||
@ -477,6 +483,7 @@ class CfgWeapons {
|
|||||||
"30Rnd_556x45_Stanag_Tracer_Red",
|
"30Rnd_556x45_Stanag_Tracer_Red",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Green",
|
"30Rnd_556x45_Stanag_Tracer_Green",
|
||||||
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
"30Rnd_556x45_Stanag_Tracer_Yellow",
|
||||||
|
"ACE_30Rnd_556x45_Stanag_M995_AP_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk262_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
|
||||||
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
|
||||||
@ -503,8 +510,10 @@ class CfgWeapons {
|
|||||||
magazines[] = {
|
magazines[] = {
|
||||||
"20Rnd_762x51_Mag",
|
"20Rnd_762x51_Mag",
|
||||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||||
|
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||||
"ACE_20Rnd_762x51_Mk319_Mod_0_Mag",
|
"ACE_20Rnd_762x51_Mk319_Mod_0_Mag",
|
||||||
|
"ACE_20Rnd_762x51_M993_AP_Mag",
|
||||||
"ACE_20Rnd_762x51_Mag_SD"
|
"ACE_20Rnd_762x51_Mag_SD"
|
||||||
};
|
};
|
||||||
initSpeed = -0.9724;
|
initSpeed = -0.9724;
|
||||||
@ -528,6 +537,7 @@ class CfgWeapons {
|
|||||||
"5Rnd_127x108_Mag",
|
"5Rnd_127x108_Mag",
|
||||||
"5Rnd_127x108_APDS_Mag",
|
"5Rnd_127x108_APDS_Mag",
|
||||||
"ACE_5Rnd_127x99_Mag",
|
"ACE_5Rnd_127x99_Mag",
|
||||||
|
"ACE_5Rnd_127x99_API_Mag",
|
||||||
"ACE_5Rnd_127x99_AMAX_Mag"
|
"ACE_5Rnd_127x99_AMAX_Mag"
|
||||||
};
|
};
|
||||||
initSpeed = -1.0;
|
initSpeed = -1.0;
|
||||||
@ -551,8 +561,10 @@ class CfgWeapons {
|
|||||||
magazines[] = {
|
magazines[] = {
|
||||||
"20Rnd_762x51_Mag",
|
"20Rnd_762x51_Mag",
|
||||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||||
|
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||||
"ACE_20Rnd_762x51_Mk319_Mod_0_Mag",
|
"ACE_20Rnd_762x51_Mk319_Mod_0_Mag",
|
||||||
|
"ACE_20Rnd_762x51_M993_AP_Mag",
|
||||||
"ACE_20Rnd_762x51_Mag_SD"
|
"ACE_20Rnd_762x51_Mag_SD"
|
||||||
};
|
};
|
||||||
initSpeed = -0.9843;
|
initSpeed = -0.9843;
|
||||||
@ -573,8 +585,10 @@ class CfgWeapons {
|
|||||||
magazines[] = {
|
magazines[] = {
|
||||||
"20Rnd_762x51_Mag",
|
"20Rnd_762x51_Mag",
|
||||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||||
|
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||||
"ACE_20Rnd_762x51_Mk319_Mod_0_Mag",
|
"ACE_20Rnd_762x51_Mk319_Mod_0_Mag",
|
||||||
|
"ACE_20Rnd_762x51_M993_AP_Mag",
|
||||||
"ACE_20Rnd_762x51_Mag_SD"
|
"ACE_20Rnd_762x51_Mag_SD"
|
||||||
};
|
};
|
||||||
initSpeed = -0.9916;
|
initSpeed = -0.9916;
|
||||||
|
@ -256,42 +256,6 @@
|
|||||||
<Italian>Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
|
<Italian>Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
|
||||||
<Russian>Калибр: 5,56x45 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
|
<Russian>Калибр: 5,56x45 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_30Rnd_556x45_mag_APName">
|
|
||||||
<English>5.56mm 30Rnd AP Mag</English>
|
|
||||||
<Hungarian>5,56 mm Páncéltörő 30-as Tár</Hungarian>
|
|
||||||
<German>5,56 mm 30-Schuss-Magazin AP</German>
|
|
||||||
<Spanish>Cargador de 30 balas AP de 5,56mm</Spanish>
|
|
||||||
<French>Ch. 5,56mm 30Cps AP</French>
|
|
||||||
<Polish>Magazynek 5,56mm 30rd AP</Polish>
|
|
||||||
<Czech>5.56mm 30ks AP Zásobník</Czech>
|
|
||||||
<Portuguese>Carregador de 30 projéteis AP de 5,56mm</Portuguese>
|
|
||||||
<Italian>Caricatore 5.56mm 30Rnd AP</Italian>
|
|
||||||
<Russian>Магазин из 30-ти 5,56 мм бронебойных</Russian>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_ACE_30Rnd_556x45_mag_APNameShort">
|
|
||||||
<English>5.56mm AP</English>
|
|
||||||
<Hungarian>5,56 mm Páncéltörő</Hungarian>
|
|
||||||
<German>5,56mm AP</German>
|
|
||||||
<Spanish>5,56mm AP</Spanish>
|
|
||||||
<French>5,56mm AP</French>
|
|
||||||
<Polish>5,56mm AP</Polish>
|
|
||||||
<Czech>5.56mm AP</Czech>
|
|
||||||
<Portuguese>5,56mm AP</Portuguese>
|
|
||||||
<Italian>5.56mm AP</Italian>
|
|
||||||
<Russian>5,56 мм бронебойные</Russian>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_ACE_30Rnd_556x45_mag_APDescription">
|
|
||||||
<English>Caliber: 5.56x45 mm AP<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</English>
|
|
||||||
<Hungarian>Kaliber: 5,56x45 mm Páncéltörő<br />Lövedékek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Hungarian>
|
|
||||||
<German>Kaliber: 5,56x45 mm AP<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</German>
|
|
||||||
<Spanish>Calibre: 5,56x45 mm AP<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Spanish>
|
|
||||||
<French>Calibre: 5,56x45 mm AP<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</French>
|
|
||||||
<Polish>Kaliber: 5,56x45 mm AP<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Polish>
|
|
||||||
<Czech>Ráže: 5.56x45 mm AP<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Czech>
|
|
||||||
<Portuguese>Calibre: 5,56x45 mm AP<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Portuguese>
|
|
||||||
<Italian>Calibro: 5.56x45 mm AP<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Italian>
|
|
||||||
<Russian>Калибр: 5,56x45 мм бронебойные<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR</Russian>
|
|
||||||
</Key>
|
|
||||||
<!-- 7.62x51mm -->
|
<!-- 7.62x51mm -->
|
||||||
<Key ID="STR_ACE_20Rnd_762x51_mag_TracerName">
|
<Key ID="STR_ACE_20Rnd_762x51_mag_TracerName">
|
||||||
<English>7.62mm 20rnd Tracer Mag</English>
|
<English>7.62mm 20rnd Tracer Mag</English>
|
||||||
@ -401,42 +365,6 @@
|
|||||||
<Italian>Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian>
|
<Italian>Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian>
|
||||||
<Russian>Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian>
|
<Russian>Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_20Rnd_762x51_mag_APName">
|
|
||||||
<English>7.62mm 20Rnd AP Mag</English>
|
|
||||||
<Hungarian>7,62 mm Páncéltörő 20-as Tár</Hungarian>
|
|
||||||
<German>7,62 mm 20-Schuss-Magazin AP</German>
|
|
||||||
<Spanish>Cargador de 20 balas AP de 7,62mm</Spanish>
|
|
||||||
<French>Ch. 7,62mm 20Cps AP</French>
|
|
||||||
<Polish>Magazynek 7,62mm 20rd AP</Polish>
|
|
||||||
<Czech>7.62mm 20ks AP Zásobník</Czech>
|
|
||||||
<Portuguese>Carregador de 20 projéteis AP de 7,62mm</Portuguese>
|
|
||||||
<Italian>Caricatore 7.62mm 20Rnd AP</Italian>
|
|
||||||
<Russian>Магазин из 20-ти 7,62 мм бронебойных</Russian>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_ACE_20Rnd_762x51_mag_APNameShort">
|
|
||||||
<English>7.62mm AP</English>
|
|
||||||
<Hungarian>7,62 mm Páncéltörő</Hungarian>
|
|
||||||
<German>7,62mm AP</German>
|
|
||||||
<Spanish>7,62mm AP</Spanish>
|
|
||||||
<French>7,62mm AP</French>
|
|
||||||
<Polish>7,62mm AP</Polish>
|
|
||||||
<Czech>7.62mm AP</Czech>
|
|
||||||
<Portuguese>7,62mm AP</Portuguese>
|
|
||||||
<Italian>7.62mm AP</Italian>
|
|
||||||
<Russian>7,62 мм бронебойные</Russian>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_ACE_20Rnd_762x51_mag_APDescription">
|
|
||||||
<English>Caliber: 7.62x51 mm AP<br />Rounds: 20<br />Used in: Mk18 ABR</English>
|
|
||||||
<Hungarian>Kaliber: 7,62x51 mm Páncéltörő<br />Lövedékek: 20<br />Használható: Mk18 ABR</Hungarian>
|
|
||||||
<German>Kaliber: 7,62x51 mm AP<br />Patronen: 20<br />Eingesetzt von: EBR</German>
|
|
||||||
<Spanish>Calibre: 7,62x51 mm AP<br />Balas: 20<br />Se usa en: Mk18 ABR</Spanish>
|
|
||||||
<French>Calibre: 7,62x51 mm AP<br />Cartouches: 20<br />Utilisé dans: EBR</French>
|
|
||||||
<Polish>Kaliber: 7,62x51 mm AP<br />Pociski: 20<br />Używane w: Mk18 ABR</Polish>
|
|
||||||
<Czech>Ráže: 7.62x51 mm AP<br />Munice: 20<br />Použití: Mk18 ABR</Czech>
|
|
||||||
<Portuguese>Calibre: 7,62x51 mm AP<br />Projéteis: 20<br />Usado em: Mk18 ABR</Portuguese>
|
|
||||||
<Italian>Calibro: 7.62x51 mm AP<br />Munizioni: 20<br />In uso su: Mk18 ABR</Italian>
|
|
||||||
<Russian>Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR</Russian>
|
|
||||||
</Key>
|
|
||||||
<!-- .338 Norma Magnum -->
|
<!-- .338 Norma Magnum -->
|
||||||
<Key ID="STR_ACE_130Rnd_338_Mag_TracerName">
|
<Key ID="STR_ACE_130Rnd_338_Mag_TracerName">
|
||||||
<English>.338 NM 130Rnd Tracer Belt</English>
|
<English>.338 NM 130Rnd Tracer Belt</English>
|
||||||
@ -564,31 +492,6 @@
|
|||||||
<Spanish>Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus</Spanish>
|
<Spanish>Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus</Spanish>
|
||||||
<Russian>Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus</Russian>
|
<Russian>Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APName">
|
|
||||||
<English>9.3mm 10Rnd AP Mag</English>
|
|
||||||
<German>9,3mm 10-Schuss-Magazin Hartkern</German>
|
|
||||||
<Polish>Magazynek 9,3mm 10rd AP</Polish>
|
|
||||||
<French>Chargeur 9.3mm 10Cps AP</French>
|
|
||||||
<Spanish>Cargador de 10 balas AP de 9.3mm</Spanish>
|
|
||||||
<Russian>Магазин из 10-ти 9,3 мм бронебойных</Russian>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APNameShort">
|
|
||||||
<English>9.3mm AP</English>
|
|
||||||
<German>9,3mm AP</German>
|
|
||||||
<Polish>9,3mm AP</Polish>
|
|
||||||
<Czech>9.3mm AP</Czech>
|
|
||||||
<French>9.3mm AP</French>
|
|
||||||
<Spanish>9.3mm AP</Spanish>
|
|
||||||
<Russian>9,3 мм бронебойные</Russian>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APDescription">
|
|
||||||
<English>Caliber: 9.3x64mm AP<br />Rounds: 10<br />Used in: Cyrus</English>
|
|
||||||
<German>Kaliber: 9,3x64mm Hartkern<br />Schuss: 10<br />Verwendet für: Cyrus</German>
|
|
||||||
<Polish>Kaliber: 9,3x64 mm AP<br />Pociski: 10<br />Używany w: Cyrus</Polish>
|
|
||||||
<French>Calibre: 9.3x64mm AP<br />Cartouches: 10<br />Utilisé dans: Cyrus</French>
|
|
||||||
<Spanish>Calibre: 9.3x64mm AP<br />Balas: 10<br />Se usa en: Cyrus</Spanish>
|
|
||||||
<Russian>Калибр: 9,3x64 мм бронебойные<br />Патронов: 10<br />Используются с: Cyrus</Russian>
|
|
||||||
</Key>
|
|
||||||
<!-- 9.3x64mm 150Rnd Belt-->
|
<!-- 9.3x64mm 150Rnd Belt-->
|
||||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerName">
|
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerName">
|
||||||
<English>9.3mm 150Rnd Tracer Belt</English>
|
<English>9.3mm 150Rnd Tracer Belt</English>
|
||||||
@ -781,7 +684,7 @@
|
|||||||
<English>5.56mm Mk262</English>
|
<English>5.56mm Mk262</English>
|
||||||
<Polish>5,56mm Mk262</Polish>
|
<Polish>5,56mm Mk262</Polish>
|
||||||
<French>5.56mm Mk262</French>
|
<French>5.56mm Mk262</French>
|
||||||
<Spanish>5.56mm (Mk262)</Spanish>
|
<Spanish>5.56mm Mk262</Spanish>
|
||||||
<Russian>5,56 мм Mk262</Russian>
|
<Russian>5,56 мм Mk262</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Description">
|
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk262_mag_Description">
|
||||||
@ -793,16 +696,16 @@
|
|||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Name">
|
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Name">
|
||||||
<English>5.56mm 30Rnd Mag (Mk318)</English>
|
<English>5.56mm 30Rnd Mag (Mk318)</English>
|
||||||
<Polish>Magazynek 5,56mm 30rd Mk318</Polish>
|
<Polish>Magazynek 5,56mm 30rd (Mk318)</Polish>
|
||||||
<French>5.56mm 30Cps (Mk318)</French>
|
<French>5.56mm 30Cps (Mk318)</French>
|
||||||
<Spanish>Cargador de 30 balas de 5.56mm (Mk318)</Spanish>
|
<Spanish>Cargador de 30 balas de 5.56mm (Mk318)</Spanish>
|
||||||
<Russian>Магазин из 30-ти 5.56 мм Mk318</Russian>
|
<Russian>Магазин из 30-ти 5.56 мм (Mk318)</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_NameShort">
|
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_NameShort">
|
||||||
<English>5.56mm Mk318</English>
|
<English>5.56mm Mk318</English>
|
||||||
<Polish>5,56mm Mk318</Polish>
|
<Polish>5,56mm Mk318</Polish>
|
||||||
<French>5.56mm Mk318</French>
|
<French>5.56mm Mk318</French>
|
||||||
<Spanish>5.56mm (Mk318)</Spanish>
|
<Spanish>5.56mm Mk318</Spanish>
|
||||||
<Russian>5.56 мм Mk318</Russian>
|
<Russian>5.56 мм Mk318</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Description">
|
<Key ID="STR_ACE_30Rnd_556x45_Stanag_Mk318_mag_Description">
|
||||||
@ -812,6 +715,27 @@
|
|||||||
<Spanish>Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30</Spanish>
|
<Spanish>Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30</Spanish>
|
||||||
<Russian>Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30</Russian>
|
<Russian>Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Name">
|
||||||
|
<English>5.56mm 30Rnd Mag (M995 AP)</English>
|
||||||
|
<Polish>Magazynek 5,56mm 30rd (M995 AP)</Polish>
|
||||||
|
<French>5.56mm 30Cps (M995 AP)</French>
|
||||||
|
<Spanish>Cargador de 30 balas de 5.56mm (M995 AP)</Spanish>
|
||||||
|
<Russian>Магазин из 30-ти 5.56 мм (M995 AP)</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_NameShort">
|
||||||
|
<English>5.56mm AP</English>
|
||||||
|
<Polish>5,56mm AP</Polish>
|
||||||
|
<French>5.56mm AP</French>
|
||||||
|
<Spanish>5.56mm AP</Spanish>
|
||||||
|
<Russian>5.56 мм AP</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Description">
|
||||||
|
<English>Caliber: 5.56x45 mm NATO (M995 AP)<br />Rounds: 30</English>
|
||||||
|
<Polish>Kaliber: 5,56x45 mm NATO (M995 AP)<br />Pociski: 30</Polish>
|
||||||
|
<French>Calibre: 5.56x45 mm NATO (M995 AP)<br />Cartouches: 30</French>
|
||||||
|
<Spanish>Calibre: 5.56x45 mm NATO (M995 AP)<br />Balas: 30</Spanish>
|
||||||
|
<Russian>Калибр: 5,56x45 мм NATO (M995 AP)<br />Патронов: 30</Russian>
|
||||||
|
</Key>
|
||||||
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Name">
|
<Key ID="STR_ACE_10Rnd_762x51_M118LR_Mag_Name">
|
||||||
<English>7.62mm 10Rnd Mag (M118LR)</English>
|
<English>7.62mm 10Rnd Mag (M118LR)</English>
|
||||||
<Polish>Magazynek 7,62mm 10rd (M118LR)</Polish>
|
<Polish>Magazynek 7,62mm 10rd (M118LR)</Polish>
|
||||||
@ -854,6 +778,48 @@
|
|||||||
<Spanish>Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 20</Spanish>
|
<Spanish>Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 20</Spanish>
|
||||||
<Russian>Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 20</Russian>
|
<Russian>Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 20</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Name">
|
||||||
|
<English>7.62mm 10Rnd Mag (Mk316 Mod 0)</English>
|
||||||
|
<Polish>Magazynek 7,62mm 10rd (Mk316 Mod 0)</Polish>
|
||||||
|
<French>7.62mm 10Cps (Mk316 Mod 0)</French>
|
||||||
|
<Spanish>Cargador de 10 balas de 7.62mm (Mk316 Mod 0)</Spanish>
|
||||||
|
<Russian>Магазин из 10-ти 7,62 мм (Mk316 Mod 0)</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_NameShort">
|
||||||
|
<English>7.62mm Mk316</English>
|
||||||
|
<Polish>7,62mm Mk316</Polish>
|
||||||
|
<French>7.62mm Mk316</French>
|
||||||
|
<Spanish>7.62mm Mk316</Spanish>
|
||||||
|
<Russian>7,62 мм Mk316</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Description">
|
||||||
|
<English>Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 10</English>
|
||||||
|
<Polish>Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 10</Polish>
|
||||||
|
<French>Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 10</French>
|
||||||
|
<Spanish>Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 10</Spanish>
|
||||||
|
<Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 10</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Name">
|
||||||
|
<English>7.62mm 20Rnd Mag (Mk316 Mod 0)</English>
|
||||||
|
<Polish>Magazynek 7,62mm 20rd (Mk316 Mod 0)</Polish>
|
||||||
|
<French>7.62mm 20Cps (Mk316 Mod 0)</French>
|
||||||
|
<Spanish>Cargador de 20 balas de 7.62mm (Mk316 Mod 0)</Spanish>
|
||||||
|
<Russian>Магазин из 20-ти 7,62 мм (Mk316 Mod 0)</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_NameShort">
|
||||||
|
<English>7.62mm Mk316</English>
|
||||||
|
<Polish>7,62mm Mk316</Polish>
|
||||||
|
<French>7.62mm Mk316</French>
|
||||||
|
<Spanish>7.62mm Mk316</Spanish>
|
||||||
|
<Russian>7,62 мм Mk316</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Description">
|
||||||
|
<English>Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 20</English>
|
||||||
|
<Polish>Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 20</Polish>
|
||||||
|
<French>Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 20</French>
|
||||||
|
<Spanish>Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 20</Spanish>
|
||||||
|
<Russian>Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 20</Russian>
|
||||||
|
</Key>
|
||||||
<Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Name">
|
<Key ID="STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Name">
|
||||||
<English>7.62mm 10Rnd Mag (Mk319 Mod 0)</English>
|
<English>7.62mm 10Rnd Mag (Mk319 Mod 0)</English>
|
||||||
<Polish>Magazynek 7,62mm 10rd (Mk319 Mod 0)</Polish>
|
<Polish>Magazynek 7,62mm 10rd (Mk319 Mod 0)</Polish>
|
||||||
@ -896,6 +862,48 @@
|
|||||||
<Spanish>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 20</Spanish>
|
<Spanish>Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 20</Spanish>
|
||||||
<Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20</Russian>
|
<Russian>Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_10Rnd_762x51_M993_AP_Mag_Name">
|
||||||
|
<English>7.62mm 10Rnd Mag (M993 AP)</English>
|
||||||
|
<Polish>Magazynek 7,62mm 10rd (M993 AP)</Polish>
|
||||||
|
<French>7.62mm 10Cps (M993 AP)</French>
|
||||||
|
<Spanish>Cargador de 10 balas de 7.62mm (M993 AP)</Spanish>
|
||||||
|
<Russian>Магазин из 10-ти 7,62 мм (M993 AP)</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_10Rnd_762x51_M993_AP_Mag_NameShort">
|
||||||
|
<English>7.62mm AP</English>
|
||||||
|
<Polish>7,62mm AP</Polish>
|
||||||
|
<French>7.62mm AP</French>
|
||||||
|
<Spanish>7.62mm AP</Spanish>
|
||||||
|
<Russian>7,62mm AP</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_10Rnd_762x51_M993_AP_Mag_Description">
|
||||||
|
<English>Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 10</English>
|
||||||
|
<Polish>Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 10</Polish>
|
||||||
|
<French>Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 10</French>
|
||||||
|
<Spanish>Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 10</Spanish>
|
||||||
|
<Russian>Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 10</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_20Rnd_762x51_M993_AP_Mag_Name">
|
||||||
|
<English>7.62mm 20Rnd Mag (M993 AP)</English>
|
||||||
|
<Polish>Magazynek 7,62mm 20rd (M993 AP)</Polish>
|
||||||
|
<French>7.62mm 20Cps (M993 AP)</French>
|
||||||
|
<Spanish>Cargador de 20 balas de 7.62mm (M993 AP)</Spanish>
|
||||||
|
<Russian>Магазин из 20-ти 7,62 мм (M993 AP)</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_20Rnd_762x51_M993_AP_Mag_NameShort">
|
||||||
|
<English>7.62mm AP</English>
|
||||||
|
<Polish>7,62mm AP</Polish>
|
||||||
|
<French>7.62mm AP</French>
|
||||||
|
<Spanish>7.62mm AP</Spanish>
|
||||||
|
<Russian>7,62 мм AP</Russian>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_20Rnd_762x51_M993_AP_Mag_Description">
|
||||||
|
<English>Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 20</English>
|
||||||
|
<Polish>Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 20</Polish>
|
||||||
|
<French>Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 20</French>
|
||||||
|
<Spanish>Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 20</Spanish>
|
||||||
|
<Russian>Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 20</Russian>
|
||||||
|
</Key>
|
||||||
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Name">
|
<Key ID="STR_ACE_20Rnd_762x67_Mk248_Mod_0_Mag_Name">
|
||||||
<English>7.62mm 20Rnd Mag (Mk248 Mod 0)</English>
|
<English>7.62mm 20Rnd Mag (Mk248 Mod 0)</English>
|
||||||
<Polish>Magazynek 7,62mm 20rd (Mk248 Mod 0)</Polish>
|
<Polish>Magazynek 7,62mm 20rd (Mk248 Mod 0)</Polish>
|
||||||
@ -1058,6 +1066,24 @@
|
|||||||
<Polish>Kaliber: 12,7x99 mm<br />Pociski: 5</Polish>
|
<Polish>Kaliber: 12,7x99 mm<br />Pociski: 5</Polish>
|
||||||
<Russian>Калибр: 12,7x99 мм<br />Патронов: 5</Russian>
|
<Russian>Калибр: 12,7x99 мм<br />Патронов: 5</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_5Rnd_127x99_API_Mag_Name">
|
||||||
|
<English>12.7x99mm API 5Rnd Mag</English>
|
||||||
|
<French>12.7x99mm API 5Cps</French>
|
||||||
|
<Spanish>Cargador de 5 balas de 12.7x99mm API</Spanish>
|
||||||
|
<Polish>Magazynek 12,7x99mm API 5rd</Polish>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_5Rnd_127x99_API_Mag_NameShort">
|
||||||
|
<English>12.7mm API</English>
|
||||||
|
<French>12.7mm API</French>
|
||||||
|
<Spanish>12.7mm API</Spanish>
|
||||||
|
<Polish>12,7mm API</Polish>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_5Rnd_127x99_API_Mag_Description">
|
||||||
|
<English>Caliber: 12.7x99mm API<br />Rounds: 5</English>
|
||||||
|
<French>Calibre: 12.7x99mm API<br />Cartouches: 5</French>
|
||||||
|
<Spanish>Calibre: 12.7x99mm API<br />Balas: 5</Spanish>
|
||||||
|
<Polish>Kaliber: 12,7x99 mm API<br />Pociski: 5</Polish>
|
||||||
|
</Key>
|
||||||
<Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Name">
|
<Key ID="STR_ACE_5Rnd_127x99_AMAX_Mag_Name">
|
||||||
<English>12.7x99mm 5Rnd Mag (AMAX)</English>
|
<English>12.7x99mm 5Rnd Mag (AMAX)</English>
|
||||||
<French>12.7x99mm 5Rnd Mag (AMAX)</French>
|
<French>12.7x99mm 5Rnd Mag (AMAX)</French>
|
||||||
|
@ -101,25 +101,20 @@ class CfgVehicles {
|
|||||||
#define MACRO_LOADUNLOADCAPTIVE \
|
#define MACRO_LOADUNLOADCAPTIVE \
|
||||||
class ACE_Actions { \
|
class ACE_Actions { \
|
||||||
class ACE_MainActions { \
|
class ACE_MainActions { \
|
||||||
selection = ""; \
|
class GVAR(LoadCaptive) { \
|
||||||
class ACE_LoadCaptive { \
|
|
||||||
displayName = "$STR_ACE_Captives_LoadCaptive"; \
|
displayName = "$STR_ACE_Captives_LoadCaptive"; \
|
||||||
distance = 4; \
|
distance = 4; \
|
||||||
condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \
|
condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \
|
||||||
statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \
|
statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \
|
||||||
exceptions[] = {"isNotEscorting"}; \
|
exceptions[] = {"isNotEscorting"}; \
|
||||||
showDisabled = 0; \
|
|
||||||
priority = 1.2; \
|
priority = 1.2; \
|
||||||
hotkey = "L"; \
|
|
||||||
}; \
|
}; \
|
||||||
class ACE_UnloadCaptive { \
|
class GVAR(UnloadCaptive) { \
|
||||||
displayName = "$STR_ACE_Captives_UnloadCaptive"; \
|
displayName = "$STR_ACE_Captives_UnloadCaptive"; \
|
||||||
distance = 4; \
|
distance = 4; \
|
||||||
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \
|
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \
|
||||||
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \
|
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \
|
||||||
showDisabled = 0; \
|
|
||||||
priority = 1.2; \
|
priority = 1.2; \
|
||||||
hotkey = "C"; \
|
|
||||||
}; \
|
}; \
|
||||||
}; \
|
}; \
|
||||||
};
|
};
|
||||||
|
@ -22,7 +22,7 @@ PARAMS_3(_unit,_target,_state);
|
|||||||
if (_state) then {
|
if (_state) then {
|
||||||
if (_unit getVariable [QGVAR(isEscorting), false]) exitWith {};
|
if (_unit getVariable [QGVAR(isEscorting), false]) exitWith {};
|
||||||
|
|
||||||
[_unit, _target] call EFUNC(common,claim);
|
[_unit, _target, false] call EFUNC(common,claim);
|
||||||
_unit setVariable [QGVAR(isEscorting), true, true];
|
_unit setVariable [QGVAR(isEscorting), true, true];
|
||||||
|
|
||||||
_target attachTo [_unit, [0, 1, 0]];
|
_target attachTo [_unit, [0, 1, 0]];
|
||||||
@ -34,8 +34,7 @@ if (_state) then {
|
|||||||
{[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);},
|
{[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);},
|
||||||
nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))];
|
nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))];
|
||||||
|
|
||||||
private "_escortFnc";
|
[{
|
||||||
_escortFnc = {
|
|
||||||
EXPLODE_3_PVT((_this select 0),_unit,_target,_actionID);
|
EXPLODE_3_PVT((_this select 0),_unit,_target,_actionID);
|
||||||
if (_unit getVariable [QGVAR(isEscorting), false]) then {
|
if (_unit getVariable [QGVAR(isEscorting), false]) then {
|
||||||
if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then {
|
if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then {
|
||||||
@ -45,13 +44,12 @@ if (_state) then {
|
|||||||
|
|
||||||
if (!(_unit getVariable [QGVAR(isEscorting), false])) then {
|
if (!(_unit getVariable [QGVAR(isEscorting), false])) then {
|
||||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||||
[objNull, _target] call EFUNC(common,claim);
|
[objNull, _target, false] call EFUNC(common,claim);
|
||||||
detach _target;
|
detach _target;
|
||||||
_unit removeAction _actionID;
|
_unit removeAction _actionID;
|
||||||
_unit setVariable [QGVAR(escortedUnit), objNull, true];
|
_unit setVariable [QGVAR(escortedUnit), objNull, true];
|
||||||
};
|
};
|
||||||
};
|
}, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
|
||||||
[_escortFnc, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
_unit setVariable [QGVAR(isEscorting), false, true];
|
_unit setVariable [QGVAR(isEscorting), false, true];
|
||||||
|
@ -97,14 +97,16 @@ if (!hasInterface) exitWith {};
|
|||||||
call COMPILE_FILE(scripts\assignedItemFix);
|
call COMPILE_FILE(scripts\assignedItemFix);
|
||||||
call COMPILE_FILE(scripts\initScrollWheel);
|
call COMPILE_FILE(scripts\initScrollWheel);
|
||||||
|
|
||||||
0 spawn {
|
DFUNC(mouseZHandler) = {
|
||||||
while {true} do {
|
|
||||||
waitUntil {!isNull (findDisplay 46)}; sleep 0.1;
|
waitUntil {!isNull (findDisplay 46)}; sleep 0.1;
|
||||||
findDisplay 46 displayAddEventHandler ["MouseZChanged", QUOTE( _this call GVAR(onScrollWheel) )];
|
findDisplay 46 displayAddEventHandler ["MouseZChanged", QUOTE( _this call GVAR(onScrollWheel) )];
|
||||||
[false] call FUNC(disableUserInput);
|
[false] call FUNC(disableUserInput);
|
||||||
waitUntil {isNull (findDisplay 46)};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
addMissionEventHandler ["Loaded", {[] spawn FUNC(mouseZHandler)}];
|
||||||
|
[] spawn FUNC(mouseZHandler);
|
||||||
|
|
||||||
|
|
||||||
enableCamShake true;
|
enableCamShake true;
|
||||||
|
|
||||||
// Set the name for the current player
|
// Set the name for the current player
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
// Conditions: canInteract
|
// Conditions: canInteract
|
||||||
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
if !(call FUNC(canUseRangefinder) || FUNC(canUseFCS)) exitWith {false};
|
if !(call FUNC(canUseFCS)) exitWith {false};
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), 50] call FUNC(adjustRange);
|
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), 50] call FUNC(adjustRange);
|
||||||
@ -49,7 +49,7 @@
|
|||||||
// Conditions: canInteract
|
// Conditions: canInteract
|
||||||
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
// Conditions: specific
|
// Conditions: specific
|
||||||
if !(call FUNC(canUseRangefinder) || FUNC(canUseFCS)) exitWith {false};
|
if !(call FUNC(canUseFCS)) exitWith {false};
|
||||||
|
|
||||||
// Statement
|
// Statement
|
||||||
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -50] call FUNC(adjustRange);
|
[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -50] call FUNC(adjustRange);
|
||||||
|
@ -6,15 +6,15 @@ class CfgAmmo {
|
|||||||
//class ace_arty_105mm_m1_m782_time;
|
//class ace_arty_105mm_m1_m782_time;
|
||||||
//class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {};
|
//class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {};
|
||||||
//class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox {
|
//class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox {
|
||||||
// ACE_FRAG_SKIP = 1;
|
// GVAR(skip) = 1;
|
||||||
//};
|
//};
|
||||||
class Bo_GBU12_LGB;
|
class Bo_GBU12_LGB;
|
||||||
class Nou_GBU12 : Bo_GBU12_LGB {
|
class Nou_GBU12 : Bo_GBU12_LGB {
|
||||||
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
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"};
|
||||||
ACE_FRAG_METAL = 140000;
|
GVAR(metal) = 140000;
|
||||||
ACE_FRAG_CHARGE = 87000;
|
GVAR(charge) = 87000;
|
||||||
ACE_FRAG_GURNEY_C = 2320;
|
GVAR(gurney_c) = 2320;
|
||||||
ACE_FRAG_GURNEY_K = 1/2;
|
GVAR(gurney_k) = 1/2;
|
||||||
sideAirFriction = 0.04;
|
sideAirFriction = 0.04;
|
||||||
airFriction = 0.04;
|
airFriction = 0.04;
|
||||||
laserLock = 0;
|
laserLock = 0;
|
||||||
@ -23,80 +23,118 @@ class CfgAmmo {
|
|||||||
class GrenadeBase;
|
class GrenadeBase;
|
||||||
class Grenade;
|
class Grenade;
|
||||||
class GrenadeHand: Grenade {
|
class GrenadeHand: Grenade {
|
||||||
ACE_FRAG_SKIP = 0;
|
GVAR(skip) = 0;
|
||||||
ACE_FRAG_FORCE = 1;
|
GVAR(force) = 1;
|
||||||
// This is a good high-drag frag type for grenades.
|
// This is a good high-drag frag type for grenades.
|
||||||
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
|
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||||
/*
|
/*
|
||||||
These values are based on the M67 Grenade, should be tweaked for
|
These values are based on the M67 Grenade, should be tweaked for
|
||||||
individual grenades.
|
individual grenades.
|
||||||
*/
|
*/
|
||||||
ACE_FRAG_METAL = 210; // metal in grams
|
GVAR(metal) = 210; // metal in grams
|
||||||
ACE_FRAG_CHARGE = 185; // explosive in grams
|
GVAR(charge) = 185; // explosive in grams
|
||||||
ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
|
GVAR(gurney_c) = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||||
ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
GVAR(gurney_k) = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||||
};
|
};
|
||||||
class GrenadeHand_stone: GrenadeHand {
|
class GrenadeHand_stone: GrenadeHand {
|
||||||
ACE_FRAG_SKIP = 1;
|
GVAR(skip) = 1;
|
||||||
};
|
};
|
||||||
class SmokeShell: GrenadeHand {
|
class SmokeShell: GrenadeHand {
|
||||||
ACE_FRAG_SKIP = 1;
|
GVAR(skip) = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RocketBase;
|
class RocketBase;
|
||||||
//class R_Hydra_HE: RocketBase {
|
//class R_Hydra_HE: RocketBase {
|
||||||
// ACE_FRAG_SKIP = 1;
|
// GVAR(skip) = 1;
|
||||||
//};
|
//};
|
||||||
|
|
||||||
//class R_57mm_HE: RocketBase {
|
//class R_57mm_HE: RocketBase {
|
||||||
// ACE_FRAG_SKIP = 1;
|
// GVAR(skip) = 1;
|
||||||
//};
|
//};
|
||||||
|
|
||||||
class R_80mm_HE: RocketBase {
|
class R_80mm_HE: RocketBase {
|
||||||
ACE_FRAG_SKIP = 1;
|
GVAR(skip) = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
//class R_S8T_AT: RocketBase {
|
//class R_S8T_AT: RocketBase {
|
||||||
// ACE_FRAG_SKIP = 1;
|
// GVAR(skip) = 1;
|
||||||
//};
|
//};
|
||||||
|
|
||||||
class BombCore;
|
class BombCore;
|
||||||
class Bo_Mk82: BombCore {
|
class Bo_Mk82: BombCore {
|
||||||
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
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"};
|
||||||
ACE_FRAG_METAL = 140000;
|
GVAR(metal) = 140000;
|
||||||
ACE_FRAG_CHARGE = 87000;
|
GVAR(charge) = 87000;
|
||||||
ACE_FRAG_GURNEY_C = 2320;
|
GVAR(gurney_c) = 2320;
|
||||||
ACE_FRAG_GURNEY_K = 1/2;
|
GVAR(gurney_k) = 1/2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class G_40mm_HE: GrenadeBase {
|
class G_40mm_HE: GrenadeBase {
|
||||||
ACE_FRAG_SKIP = 0;
|
GVAR(skip) = 0;
|
||||||
ACE_FRAG_FORCE = 1;
|
GVAR(force) = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_G_40mm_HEDP: G_40mm_HE {
|
class ACE_G_40mm_HEDP: G_40mm_HE {
|
||||||
|
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||||
|
GVAR(metal) = 200;
|
||||||
|
GVAR(charge) = 45;
|
||||||
|
GVAR(gurney_c) = 2830;
|
||||||
|
GVAR(gurney_k) = 3/5;
|
||||||
};
|
};
|
||||||
class ACE_G_40mm_HE: ACE_G_40mm_HEDP {
|
class ACE_G_40mm_HE: ACE_G_40mm_HEDP {
|
||||||
|
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||||
|
GVAR(metal) = 200;
|
||||||
|
GVAR(charge) = 32;
|
||||||
|
GVAR(gurney_c) = 2700;
|
||||||
|
GVAR(gurney_k) = 3/5;
|
||||||
};
|
};
|
||||||
class ACE_G_40mm_Practice: ACE_G_40mm_HE {
|
class ACE_G_40mm_Practice: ACE_G_40mm_HE {
|
||||||
ACE_FRAG_SKIP = 1;
|
GVAR(skip) = 1;
|
||||||
};
|
};
|
||||||
class ACE_G40mm_HE_VOG25P: G_40mm_HE {
|
class ACE_G40mm_HE_VOG25P: G_40mm_HE {
|
||||||
ACE_FRAG_SKIP = 0;
|
GVAR(skip) = 0;
|
||||||
ACE_FRAG_FORCE = 1;
|
GVAR(force) = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// curator ammo entries
|
||||||
|
class Sh_82mm_AMOS;
|
||||||
|
class ModuleOrdnanceMortar_F_Ammo: Sh_82mm_AMOS {
|
||||||
|
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||||
|
GVAR(metal) = 800;
|
||||||
|
GVAR(charge) = 4200;
|
||||||
|
GVAR(gurney_c) = 2320;
|
||||||
|
GVAR(gurney_k) = 1/2;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Sh_155mm_AMOS;
|
||||||
|
class ModuleOrdnanceHowitzer_F_ammo: Sh_155mm_AMOS {
|
||||||
|
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;
|
||||||
|
GVAR(gurney_c) = 2320;
|
||||||
|
GVAR(gurney_k) = 1/2;
|
||||||
|
};
|
||||||
|
|
||||||
|
//class R_230mm_HE;
|
||||||
|
//class ModuleOrdnanceRocket_F_ammo: R_230mm_HE {
|
||||||
|
//};
|
||||||
|
|
||||||
|
//class R_230mm_fly;
|
||||||
|
//class ModuleOrdnanceRocket_F_subammo: R_230mm_fly {
|
||||||
|
//};
|
||||||
|
// end of curator ammo entries
|
||||||
|
|
||||||
//class R_SMAW_HEDP;
|
//class R_SMAW_HEDP;
|
||||||
//class R_MEEWS_HEDP : R_SMAW_HEDP {
|
//class R_MEEWS_HEDP : R_SMAW_HEDP {
|
||||||
// ACE_FRAG_FORCE = 1;
|
// GVAR(force) = 1;
|
||||||
// ACE_FRAG_MULTIPLIER = 1.2;
|
// GVAR(multiplier) = 1.2;
|
||||||
//};
|
//};
|
||||||
|
|
||||||
//class MissileBase;
|
//class MissileBase;
|
||||||
//class M_Hellfire_AT: MissileBase {
|
//class M_Hellfire_AT: MissileBase {
|
||||||
// ACE_FRAG_FORCE = 1;
|
// GVAR(force) = 1;
|
||||||
// ACE_FRAG_MULTIPLIER = 1.75;
|
// GVAR(multiplier) = 1.75;
|
||||||
//};
|
//};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -26,6 +26,9 @@ GVAR(tracesStarted) = false;
|
|||||||
GVAR(traceID) = -1;
|
GVAR(traceID) = -1;
|
||||||
GVAR(autoTrace) = true;
|
GVAR(autoTrace) = true;
|
||||||
|
|
||||||
|
// TODO setting
|
||||||
|
GVAR(enabled) = true;
|
||||||
|
|
||||||
|
|
||||||
// * Other Shit */
|
// * Other Shit */
|
||||||
PREP(frag_trace);
|
PREP(frag_trace);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#ifdef DEBUG_MODE_FULL
|
#ifdef DEBUG_MODE_FULL
|
||||||
GVAR(traceFrags) = true;
|
GVAR(traceFrags) = true;
|
||||||
#endif
|
#endif
|
||||||
// player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
||||||
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
|
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
|
||||||
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
|
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
|
||||||
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
|
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
|
||||||
@ -40,7 +40,7 @@ if(!alive _round && (_initialData select 6) == 1) then {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||||
// player sideChat format["BBBB"];
|
// ACE_player sideChat format["BBBB"];
|
||||||
_exit = false;
|
_exit = false;
|
||||||
_vm = 1;
|
_vm = 1;
|
||||||
_velocity = _initialData select 5;
|
_velocity = _initialData select 5;
|
||||||
@ -51,10 +51,10 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
if(alive _round) then {
|
if(alive _round) then {
|
||||||
_diff = _velocity vectorDiff (velocity _round);
|
_diff = _velocity vectorDiff (velocity _round);
|
||||||
_polar = _diff call CBA_fnc_vect2polar;
|
_polar = _diff call CBA_fnc_vect2polar;
|
||||||
// player sideChat format["polar: %1", _polar];
|
// ACE_player sideChat format["polar: %1", _polar];
|
||||||
if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then {
|
if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then {
|
||||||
if(_caliber < 2.5) then {
|
if(_caliber < 2.5) then {
|
||||||
// player sideChat format["exit!"];
|
// ACE_player sideChat format["exit!"];
|
||||||
_exit = true;
|
_exit = true;
|
||||||
} else {
|
} else {
|
||||||
_vm = 1-(_curVelocity/_oldVelocity);
|
_vm = 1-(_curVelocity/_oldVelocity);
|
||||||
@ -83,7 +83,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
// NOU_TRACES set[(count NOU_TRACES), _data];
|
// NOU_TRACES set[(count NOU_TRACES), _data];
|
||||||
|
|
||||||
if(!lineIntersects [_pos1, _pos2]) exitWith {
|
if(!lineIntersects [_pos1, _pos2]) exitWith {
|
||||||
// player sideChat format["FOUND!"];
|
// ACE_player sideChat format["FOUND!"];
|
||||||
_spallPos = _pos2;
|
_spallPos = _pos2;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -91,7 +91,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
_spallPolar = _velocity call CBA_fnc_vect2polar;
|
_spallPolar = _velocity call CBA_fnc_vect2polar;
|
||||||
|
|
||||||
if(_explosive > 0) then {
|
if(_explosive > 0) then {
|
||||||
// player sideChat format["EXPLOSIVE!"];
|
// ACE_player sideChat format["EXPLOSIVE!"];
|
||||||
_warn = false;
|
_warn = false;
|
||||||
_c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE");
|
_c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE");
|
||||||
if(_c == 0) then { _c = 1; _warn = true;};
|
if(_c == 0) then { _c = 1; _warn = true;};
|
||||||
@ -137,7 +137,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
_fragment setPosASL _spallPos;
|
_fragment setPosASL _spallPos;
|
||||||
_fragment setVelocity _spallFragVect;
|
_fragment setVelocity _spallFragVect;
|
||||||
if(GVAR(traceFrags)) then {
|
if(GVAR(traceFrags)) then {
|
||||||
[player, _fragment, [1,0.5,0,1]] call FUNC(addTrack);
|
[ACE_player, _fragment, [1,0.5,0,1]] call FUNC(addTrack);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
_spread = 5+(random 5);
|
_spread = 5+(random 5);
|
||||||
@ -158,7 +158,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
_fragment setPosASL _spallPos;
|
_fragment setPosASL _spallPos;
|
||||||
_fragment setVelocity _spallFragVect;
|
_fragment setVelocity _spallFragVect;
|
||||||
if(GVAR(traceFrags)) then {
|
if(GVAR(traceFrags)) then {
|
||||||
[player, _fragment, [1,0,0,1]] call FUNC(addTrack);
|
[ACE_player, _fragment, [1,0,0,1]] call FUNC(addTrack);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall"];
|
private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall"];
|
||||||
if !(isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {};
|
if !(!isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {};
|
||||||
|
|
||||||
_gun = _this select 0;
|
_gun = _this select 0;
|
||||||
_type = _this select 4;
|
_type = _this select 4;
|
||||||
@ -11,10 +11,10 @@ if(_round in GVAR(blackList)) exitWith {
|
|||||||
};
|
};
|
||||||
|
|
||||||
_doFragTrack = false;
|
_doFragTrack = false;
|
||||||
if(_gun == player) then {
|
if(_gun == ACE_player) then {
|
||||||
_doFragTrack = true;
|
_doFragTrack = true;
|
||||||
} else {
|
} else {
|
||||||
if((gunner _gun) == player) then {
|
if((gunner _gun) == ACE_player) then {
|
||||||
_doFragTrack = true;
|
_doFragTrack = true;
|
||||||
} else {
|
} else {
|
||||||
if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then {
|
if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then {
|
||||||
@ -28,14 +28,18 @@ if(_doSpall) then {
|
|||||||
GVAR(spallHPData) = [];
|
GVAR(spallHPData) = [];
|
||||||
};
|
};
|
||||||
if(GVAR(spallIsTrackingCount) > 5) then {
|
if(GVAR(spallIsTrackingCount) > 5) then {
|
||||||
// player sideChat "LIMT!";
|
// ACE_player sideChat "LIMT!";
|
||||||
_doSpall = false;
|
_doSpall = false;
|
||||||
} else {
|
} else {
|
||||||
GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1;
|
GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
// player sideChat format["c: %1", GVAR(spallIsTrackingCount)];
|
// ACE_player sideChat format["c: %1", GVAR(spallIsTrackingCount)];
|
||||||
[player, _round, [1,0,0,1]] call nou_fnc_addTrack;
|
|
||||||
|
#ifdef DEBUG_MODE_FULL
|
||||||
|
[ACE_player, _round, [1,0,0,1]] call FUNC(addTrack);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(_doFragTrack && alive _round) then {
|
if(_doFragTrack && alive _round) then {
|
||||||
GVAR(trackedObjects) pushBack _round;
|
GVAR(trackedObjects) pushBack _round;
|
||||||
_spallTrack = [];
|
_spallTrack = [];
|
||||||
@ -44,5 +48,5 @@ if(_doFragTrack && alive _round) then {
|
|||||||
if(_doSpall) then {
|
if(_doSpall) then {
|
||||||
[_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack);
|
[_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack);
|
||||||
};
|
};
|
||||||
// player sideChat "WTF2";
|
// ACE_player sideChat "WTF2";
|
||||||
};
|
};
|
||||||
|
@ -108,8 +108,8 @@ _fragArcs = [];
|
|||||||
_fragArcs set[360, 0];
|
_fragArcs set[360, 0];
|
||||||
|
|
||||||
#ifdef DEBUG_MODE_FULL
|
#ifdef DEBUG_MODE_FULL
|
||||||
player sideChat format["_fragRange: %1", _fragRange];
|
ACE_player sideChat format["_fragRange: %1", _fragRange];
|
||||||
player sideChat format["_objects: %1", _objects];
|
ACE_player sideChat format["_objects: %1", _objects];
|
||||||
#endif
|
#endif
|
||||||
_doRandom = false;
|
_doRandom = false;
|
||||||
if(_isArmed && (count _objects) > 0) then {
|
if(_isArmed && (count _objects) > 0) then {
|
||||||
@ -176,7 +176,7 @@ if(_isArmed && (count _objects) > 0) then {
|
|||||||
GVAR(traceFrags) = true;
|
GVAR(traceFrags) = true;
|
||||||
#endif
|
#endif
|
||||||
if(GVAR(traceFrags)) then {
|
if(GVAR(traceFrags)) then {
|
||||||
[player, _fragObj, [1,0,0,1]] call FUNC(addTrack);
|
[ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack);
|
||||||
};
|
};
|
||||||
_fragCount = _fragCount + 1;
|
_fragCount = _fragCount + 1;
|
||||||
_currentCount = _currentCount + 1;
|
_currentCount = _currentCount + 1;
|
||||||
@ -217,14 +217,14 @@ if(_isArmed && (count _objects) > 0) then {
|
|||||||
GVAR(traceFrags) = true;
|
GVAR(traceFrags) = true;
|
||||||
#endif
|
#endif
|
||||||
if(GVAR(traceFrags)) then {
|
if(GVAR(traceFrags)) then {
|
||||||
[player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack);
|
[ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack);
|
||||||
};
|
};
|
||||||
_fragCount = _fragCount + 1;
|
_fragCount = _fragCount + 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
// #ifdef DEBUG_MODE_FULL
|
// #ifdef DEBUG_MODE_FULL
|
||||||
// player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
|
// ACE_player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
|
||||||
// player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
|
// ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
|
||||||
// #endif
|
// #endif
|
||||||
// _endTime = diag_tickTime;
|
// _endTime = diag_tickTime;
|
||||||
|
@ -15,11 +15,11 @@ if (!alive _round) then {
|
|||||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||||
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
|
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
|
||||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
||||||
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP");
|
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(skip));
|
||||||
if(_skip == 0) then {
|
if(_skip == 0) then {
|
||||||
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
|
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
|
||||||
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
|
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
|
||||||
_force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE");
|
_force = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(force));
|
||||||
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
|
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
|
||||||
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
|
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
|
||||||
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;
|
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
class Extended_PreInit_EventHandlers {
|
class Extended_PreInit_EventHandlers {
|
||||||
class ADDON {
|
class ADDON {
|
||||||
init = QUOTE(call COMPILE_FILE(XEH_preInit) );
|
init = QUOTE(call COMPILE_FILE(XEH_preInit) );
|
||||||
@ -20,9 +19,9 @@ class Extended_Init_EventHandlers {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class Extended_FiredNear_EventHandlers {
|
class Extended_FiredNear_EventHandlers {
|
||||||
class CAManBase {
|
class AllVehicles {
|
||||||
class GVAR(FiredNear) {
|
class GVAR(FiredNear) {
|
||||||
clientFiredNear = QUOTE( if (GVAR(enableCombatDeafness) && {_this select 0 == ACE_player}) then {_this call FUNC(firedNear)}; );
|
clientFiredNear = QUOTE(_this call FUNC(firedNear););
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,14 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
GVAR(currentDeafness) = 0;
|
GVAR(currentDeafness) = 0;
|
||||||
GVAR(newStrength) = 0;
|
GVAR(newStrength) = 0;
|
||||||
|
GVAR(playerVehAttenuation) = 1;
|
||||||
|
|
||||||
// Spawn volume updating process
|
// Spawn volume updating process
|
||||||
[FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler;
|
[FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler;
|
||||||
|
|
||||||
|
//Update veh attunation when player veh changes
|
||||||
|
["playerVehicleChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler);
|
||||||
|
["playerTurretChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler);
|
||||||
|
@ -10,6 +10,7 @@ PREP(hasEarPlugsIn);
|
|||||||
PREP(moduleHearing);
|
PREP(moduleHearing);
|
||||||
PREP(putInEarPlugs);
|
PREP(putInEarPlugs);
|
||||||
PREP(removeEarPlugs);
|
PREP(removeEarPlugs);
|
||||||
|
PREP(updatePlayerVehAttenuation);
|
||||||
PREP(updateVolume);
|
PREP(updateVolume);
|
||||||
|
|
||||||
ADDON = true;
|
ADDON = true;
|
||||||
|
@ -21,18 +21,19 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_unit", "_firer", "_distance", "_weapon", "_muzzle", "_mode", "_ammo", "_silencer", "_audibleFireCoef", "_loudness", "_strength", "_audibleFire", "_audibleFireTime", "_audibleFireTimeCoef"];
|
private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation"];
|
||||||
|
|
||||||
_unit = _this select 0;
|
PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo);
|
||||||
_firer = _this select 1;
|
|
||||||
_distance = (_this select 2) max 1;
|
|
||||||
_weapon = _this select 3;
|
|
||||||
_muzzle = _this select 4;
|
|
||||||
_mode = _this select 5;
|
|
||||||
_ammo = _this select 6;
|
|
||||||
|
|
||||||
if (toLower _weapon in ["throw", "put"]) exitWith {};
|
//Only run if combatDeafness enabled:
|
||||||
if (_unit != vehicle _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {};
|
if (!GVAR(enableCombatDeafness)) exitWith {};
|
||||||
|
//Only run if firedNear object is player or player's vehicle:
|
||||||
|
if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {};
|
||||||
|
if (_weapon in ["Throw", "Put"]) exitWith {};
|
||||||
|
|
||||||
|
_vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttenuation)};
|
||||||
|
|
||||||
|
if (_distance < 1) then {_distance = 1;};
|
||||||
|
|
||||||
_silencer = switch (_weapon) do {
|
_silencer = switch (_weapon) do {
|
||||||
case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0};
|
case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0};
|
||||||
@ -42,18 +43,15 @@ _silencer = switch (_weapon) do {
|
|||||||
};
|
};
|
||||||
|
|
||||||
_audibleFireCoef = 1;
|
_audibleFireCoef = 1;
|
||||||
//_audibleFireTimeCoef = 1;
|
|
||||||
if (_silencer != "") then {
|
if (_silencer != "") then {
|
||||||
_audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire");
|
_audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire");
|
||||||
//_audibleFireTimeCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFireTime");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire");
|
_audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire");
|
||||||
//_audibleFireTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFireTime");
|
|
||||||
|
|
||||||
_loudness = _audibleFireCoef * _audibleFire / 64;
|
_loudness = _audibleFireCoef * _audibleFire / 64;
|
||||||
_strength = _loudness - (_loudness/50 * _distance); // linear drop off
|
_strength = _vehAttenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off
|
||||||
|
|
||||||
if (_strength < 0.01) exitWith {};
|
if (_strength < 0.01) exitWith {};
|
||||||
|
|
||||||
[{_this call FUNC(earRinging)}, [_unit, _strength], 0.2, 0] call EFUNC(common,waitAndExecute);
|
[{_this call FUNC(earRinging)}, [ACE_player, _strength], 0.2, 0] call EFUNC(common,waitAndExecute);
|
||||||
|
57
addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf
Normal file
57
addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Gets the sound attenuation of a player to the outside.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Ammount that unit can hear outside <NUMBER>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [] call ace_hearing_fnc_updatePlayerVehAttenuation
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
_vehicle = vehicle ACE_player;
|
||||||
|
|
||||||
|
if (isNull _vehicle) exitWith {};
|
||||||
|
|
||||||
|
_newAttenuation = 1;
|
||||||
|
if (ACE_player != _vehicle) then {
|
||||||
|
_effectType = "";
|
||||||
|
_turretPath = [ACE_player] call EFUNC(common,getTurretIndex);
|
||||||
|
_effectType = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "attenuationEffectType");
|
||||||
|
|
||||||
|
if (!(_turretPath isEqualTo [])) then {
|
||||||
|
_turretConfig = [(configFile >> "CfgVehicles" >> (typeOf _vehicle)), _turretPath] call EFUNC(common,getTurretConfigPath);
|
||||||
|
|
||||||
|
if ((getNumber (_turretConfig >> "disableSoundAttenuation")) == 1) then {
|
||||||
|
_effectType = "";
|
||||||
|
} else {
|
||||||
|
if (isText (_turretConfig >> "soundAttenuationTurret")) then {
|
||||||
|
_effectType = getText (_turretConfig >> "soundAttenuationTurret");
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_newAttenuation = switch (true) do {
|
||||||
|
case (_effectType == ""): {1};
|
||||||
|
case (_effectType == "CarAttenuation"): {0.5};
|
||||||
|
case (_effectType == "RHS_CarAttenuation"): {0.5};
|
||||||
|
case (_effectType == "OpenCarAttenuation"): {1};
|
||||||
|
case (_effectType == "TankAttenuation"): {0.1};
|
||||||
|
case (_effectType == "HeliAttenuation"): {0.3};
|
||||||
|
case (_effectType == "OpenHeliAttenuation"): {0.9};
|
||||||
|
case (_effectType == "SemiOpenHeliAttenuation"): {0.6};
|
||||||
|
case (_effectType == "HeliAttenuationGunner"): {0.85};
|
||||||
|
case (_effectType == "HeliAttenuationRamp"): {0.85};
|
||||||
|
default {1};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
TRACE_2("New vehicle attenuation",_vehicle,_newAttenuation);
|
||||||
|
|
||||||
|
GVAR(playerVehAttenuation) = _newAttenuation;
|
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
if (!hasInterface) exitWith {};
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
|
GVAR(ParsedTextCached) = [];
|
||||||
|
|
||||||
//Setup text/shadow color matrix
|
//Setup text/shadow color matrix
|
||||||
[] call FUNC(setupTextColors);
|
[] call FUNC(setupTextColors);
|
||||||
["SettingChanged", {
|
["SettingChanged", {
|
||||||
|
@ -8,6 +8,7 @@ PREP(compileMenu);
|
|||||||
PREP(compileMenuSelfAction);
|
PREP(compileMenuSelfAction);
|
||||||
PREP(collectActiveActionTree);
|
PREP(collectActiveActionTree);
|
||||||
PREP(createAction);
|
PREP(createAction);
|
||||||
|
PREP(ctrlSetParsedTextCached);
|
||||||
PREP(findActionNode);
|
PREP(findActionNode);
|
||||||
PREP(handlePlayerChanged);
|
PREP(handlePlayerChanged);
|
||||||
PREP(isSubPath);
|
PREP(isSubPath);
|
||||||
|
@ -50,13 +50,13 @@ class ACE_Settings {
|
|||||||
displayName = "$STR_ACE_Interact_Menu_ColorTextMin";
|
displayName = "$STR_ACE_Interact_Menu_ColorTextMin";
|
||||||
};
|
};
|
||||||
class GVAR(colorShadowMax) {
|
class GVAR(colorShadowMax) {
|
||||||
value[] = {1, 1, 1, 1};
|
value[] = {0, 0, 0, 1};
|
||||||
typeName = "COLOR";
|
typeName = "COLOR";
|
||||||
isClientSettable = 1;
|
isClientSettable = 1;
|
||||||
displayName = "$STR_ACE_Interact_Menu_ColorShadowMax";
|
displayName = "$STR_ACE_Interact_Menu_ColorShadowMax";
|
||||||
};
|
};
|
||||||
class GVAR(colorShadowMin) {
|
class GVAR(colorShadowMin) {
|
||||||
value[] = {1, 1, 1, 0.25};
|
value[] = {0, 0, 0, 0.25};
|
||||||
typeName = "COLOR";
|
typeName = "COLOR";
|
||||||
isClientSettable = 1;
|
isClientSettable = 1;
|
||||||
displayName = "$STR_ACE_Interact_Menu_ColorShadowMin";
|
displayName = "$STR_ACE_Interact_Menu_ColorShadowMin";
|
||||||
|
@ -53,7 +53,9 @@ _recurseFnc = {
|
|||||||
if (_condition == "") then {_condition = "true"};
|
if (_condition == "") then {_condition = "true"};
|
||||||
|
|
||||||
// Add canInteract (including exceptions) and canInteractWith to condition
|
// Add canInteract (including exceptions) and canInteractWith to condition
|
||||||
|
if ((configName _entryCfg) != "ACE_MainActions") then {
|
||||||
_condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")];
|
_condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")];
|
||||||
|
};
|
||||||
|
|
||||||
_insertChildren = compile (getText (_entryCfg >> "insertChildren"));
|
_insertChildren = compile (getText (_entryCfg >> "insertChildren"));
|
||||||
_modifierFunction = compile (getText (_entryCfg >> "modifierFunction"));
|
_modifierFunction = compile (getText (_entryCfg >> "modifierFunction"));
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
// by commy2
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_ctrl", "_index", "_text"];
|
||||||
|
|
||||||
|
_ctrl = _this select 0;
|
||||||
|
_index = _this select 1;
|
||||||
|
_text = _this select 2;
|
||||||
|
|
||||||
|
if (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"-1")) then {
|
||||||
|
GVAR(ParsedTextCached) set [_index, _text];
|
||||||
|
_ctrl ctrlSetStructuredText parseText _text;
|
||||||
|
};
|
@ -30,6 +30,7 @@ if (_menuType == 0) then {
|
|||||||
GVAR(keyDownTime) = diag_tickTime;
|
GVAR(keyDownTime) = diag_tickTime;
|
||||||
GVAR(openedMenuType) = _menuType;
|
GVAR(openedMenuType) = _menuType;
|
||||||
GVAR(lastTimeSearchedActions) = -1000;
|
GVAR(lastTimeSearchedActions) = -1000;
|
||||||
|
GVAR(ParsedTextCached) = [];
|
||||||
|
|
||||||
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
|
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
|
||||||
visibleMap ||
|
visibleMap ||
|
||||||
|
@ -77,6 +77,7 @@ if (GVAR(openedMenuType) >= 0) then {
|
|||||||
GVAR(startHoverTime) = diag_tickTime;
|
GVAR(startHoverTime) = diag_tickTime;
|
||||||
GVAR(lastPath) = _hoverPath;
|
GVAR(lastPath) = _hoverPath;
|
||||||
GVAR(expanded) = false;
|
GVAR(expanded) = false;
|
||||||
|
GVAR(ParsedTextCached) = [];
|
||||||
} else {
|
} else {
|
||||||
if(!GVAR(expanded) && diag_tickTime-GVAR(startHoverTime) > 0.25) then {
|
if(!GVAR(expanded) && diag_tickTime-GVAR(startHoverTime) > 0.25) then {
|
||||||
GVAR(expanded) = true;
|
GVAR(expanded) = true;
|
||||||
|
@ -41,9 +41,21 @@ if((count _this) > 2) then {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// For non-self actions, exit if the action is too far away
|
// For non-self actions, exit if the action is too far away or ocluded
|
||||||
if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player &&
|
if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player &&
|
||||||
{(ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot")) distance _pos >= _distance}) exitWith {false};
|
{
|
||||||
|
private ["_headPos","_actualDistance"];
|
||||||
|
_headPos = ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot");
|
||||||
|
_actualDistance = _headPos distance _pos;
|
||||||
|
|
||||||
|
if (_actualDistance > _distance) exitWith {true};
|
||||||
|
|
||||||
|
if (_distance > 1.0) exitWith {
|
||||||
|
// If distance to action is greater than 1.0 m, check LOS
|
||||||
|
_line = [_headPos call EFUNC(common,positionToASL), _pos call EFUNC(common,positionToASL), _object, ACE_player];
|
||||||
|
lineIntersects _line
|
||||||
|
};
|
||||||
|
}) exitWith {false};
|
||||||
|
|
||||||
// Exit if the action is behind you
|
// Exit if the action is behind you
|
||||||
_sPos = if (count _pos != 2) then {
|
_sPos = if (count _pos != 2) then {
|
||||||
|
@ -27,7 +27,6 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
|
|||||||
GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
|
GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
|
||||||
};
|
};
|
||||||
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
||||||
GVAR(iconCount) = GVAR(iconCount) + 1;
|
|
||||||
if(_icon == "") then {
|
if(_icon == "") then {
|
||||||
_icon = DEFAULT_ICON;
|
_icon = DEFAULT_ICON;
|
||||||
};
|
};
|
||||||
@ -38,8 +37,11 @@ _text = if (GVAR(UseListMenu)) then {
|
|||||||
format ["<img image='%1' color='%2' align='center'/><br/><t color='%3' size='0.80' align='center' shadow='1' shadowColor='%4' shadowOffset='0.06'>%5</t>", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text];
|
format ["<img image='%1' color='%2' align='center'/><br/><t color='%3' size='0.80' align='center' shadow='1' shadowColor='%4' shadowOffset='0.06'>%5</t>", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text];
|
||||||
};
|
};
|
||||||
|
|
||||||
_ctrl ctrlSetStructuredText (parseText _text);
|
//_ctrl ctrlSetStructuredText parseText _text;
|
||||||
_text = if (GVAR(UseListMenu)) then {
|
[_ctrl, GVAR(iconCount), _text] call FUNC(ctrlSetParsedTextCached);
|
||||||
|
GVAR(iconCount) = GVAR(iconCount) + 1;
|
||||||
|
|
||||||
|
if (GVAR(UseListMenu)) then {
|
||||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW];
|
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW];
|
||||||
} else {
|
} else {
|
||||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW];
|
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW];
|
||||||
|
@ -22,14 +22,14 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
|
|||||||
|
|
||||||
private "_ctrl";
|
private "_ctrl";
|
||||||
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
||||||
GVAR(iconCount) = GVAR(iconCount) + 1;
|
|
||||||
|
|
||||||
if (GVAR(UseListMenu)) then {
|
if (GVAR(UseListMenu)) then {
|
||||||
_ctrl ctrlSetStructuredText (parseText format ["<img image='%1' color='#FF0000' size='1.6'/>", _icon]);
|
[_ctrl, GVAR(iconCount), format ["<img image='%1' color='#FF0000' size='1.6'/>", _icon]] call FUNC(ctrlSetParsedTextCached);
|
||||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.014*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.05*SafeZoneW, 0.035*SafeZoneW];
|
_ctrl ctrlSetPosition [(_sPos select 0)-(0.014*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.05*SafeZoneW, 0.035*SafeZoneW];
|
||||||
} else {
|
} else {
|
||||||
_ctrl ctrlSetStructuredText (parseText format ["<img image='%1' color='#FF0000' size='1.6' align='center'/>", _icon]);
|
[_ctrl, GVAR(iconCount), format ["<img image='%1' color='#FF0000' size='1.6' align='center'/>", _icon]] call FUNC(ctrlSetParsedTextCached);
|
||||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.050*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.1*SafeZoneW, 0.035*SafeZoneW];
|
_ctrl ctrlSetPosition [(_sPos select 0)-(0.050*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.1*SafeZoneW, 0.035*SafeZoneW];
|
||||||
};
|
};
|
||||||
//_ctrl ctrlSetBackgroundColor [1, 0, 0, 0.1];
|
//_ctrl ctrlSetBackgroundColor [1, 0, 0, 0.1];
|
||||||
|
GVAR(iconCount) = GVAR(iconCount) + 1;
|
||||||
_ctrl ctrlCommit 0;
|
_ctrl ctrlCommit 0;
|
||||||
|
@ -27,7 +27,7 @@ class CfgVehicles {
|
|||||||
class ACE_Actions {
|
class ACE_Actions {
|
||||||
class ACE_MainActions {
|
class ACE_MainActions {
|
||||||
displayName = "$STR_ACE_Interaction_MainAction";
|
displayName = "$STR_ACE_Interaction_MainAction";
|
||||||
distance = 5;
|
distance = 4;
|
||||||
condition = QUOTE(true);
|
condition = QUOTE(true);
|
||||||
statement = "";
|
statement = "";
|
||||||
icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa";
|
icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa";
|
||||||
@ -35,7 +35,6 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_TeamManagement {
|
class ACE_TeamManagement {
|
||||||
displayName = "$STR_ACE_Interaction_TeamManagement";
|
displayName = "$STR_ACE_Interaction_TeamManagement";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)});
|
||||||
statement = "";
|
statement = "";
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
@ -45,7 +44,6 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_JoinTeamRed {
|
class ACE_JoinTeamRed {
|
||||||
displayName = "$STR_ACE_Interaction_JoinTeamRed";
|
displayName = "$STR_ACE_Interaction_JoinTeamRed";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||||
statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -55,7 +53,6 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_JoinTeamGreen {
|
class ACE_JoinTeamGreen {
|
||||||
displayName = "$STR_ACE_Interaction_JoinTeamGreen";
|
displayName = "$STR_ACE_Interaction_JoinTeamGreen";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||||
statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -65,7 +62,6 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_JoinTeamBlue {
|
class ACE_JoinTeamBlue {
|
||||||
displayName = "$STR_ACE_Interaction_JoinTeamBlue";
|
displayName = "$STR_ACE_Interaction_JoinTeamBlue";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||||
statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -75,7 +71,6 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_JoinTeamYellow {
|
class ACE_JoinTeamYellow {
|
||||||
displayName = "$STR_ACE_Interaction_JoinTeamYellow";
|
displayName = "$STR_ACE_Interaction_JoinTeamYellow";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||||
statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -86,7 +81,6 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_LeaveTeam {
|
class ACE_LeaveTeam {
|
||||||
displayName = "$STR_ACE_Interaction_LeaveTeam";
|
displayName = "$STR_ACE_Interaction_LeaveTeam";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'});
|
||||||
statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -98,7 +92,6 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_JoinGroup {
|
class ACE_JoinGroup {
|
||||||
displayName = "$STR_ACE_Interaction_JoinGroup";
|
displayName = "$STR_ACE_Interaction_JoinGroup";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE(side group _player == side group _target && {group _player != group _target});
|
condition = QUOTE(side group _player == side group _target && {group _player != group _target});
|
||||||
statement = QUOTE([_player] joinSilent group _target;);
|
statement = QUOTE([_player] joinSilent group _target;);
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
@ -109,7 +102,6 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_GetDown {
|
class ACE_GetDown {
|
||||||
displayName = "$STR_ACE_Interaction_GetDown";
|
displayName = "$STR_ACE_Interaction_GetDown";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE([_target] call DFUNC(canInteractWithCivilian));
|
condition = QUOTE([_target] call DFUNC(canInteractWithCivilian));
|
||||||
statement = QUOTE([_target] call DFUNC(getDown));
|
statement = QUOTE([_target] call DFUNC(getDown));
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
@ -117,7 +109,6 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_SendAway {
|
class ACE_SendAway {
|
||||||
displayName = "$STR_ACE_Interaction_SendAway";
|
displayName = "$STR_ACE_Interaction_SendAway";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE([_target] call DFUNC(canInteractWithCivilian));
|
condition = QUOTE([_target] call DFUNC(canInteractWithCivilian));
|
||||||
statement = QUOTE([_target] call DFUNC(sendAway));
|
statement = QUOTE([_target] call DFUNC(sendAway));
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
@ -125,7 +116,6 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_Pardon {
|
class ACE_Pardon {
|
||||||
displayName = "$STR_ACE_Interaction_Pardon";
|
displayName = "$STR_ACE_Interaction_Pardon";
|
||||||
distance = 5;
|
|
||||||
condition = QUOTE(rating _target < -2000 && {alive _target} && {side group _player == side group _target});
|
condition = QUOTE(rating _target < -2000 && {alive _target} && {side group _player == side group _target});
|
||||||
statement = QUOTE([ARR_3(_target,'{_this addRating -rating _this}',_target)] call DEFUNC(common,execRemoteFnc));
|
statement = QUOTE([ARR_3(_target,'{_this addRating -rating _this}',_target)] call DEFUNC(common,execRemoteFnc));
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
|
@ -9,7 +9,9 @@ private["_apos", "_aposX", "_aposY", "_args", "_boundsInput", "_bpos", "_canFire
|
|||||||
private["_constraintLeft", "_constraintRight", "_constraintTop", "_currentTarget", "_fireDisabledEH"];
|
private["_constraintLeft", "_constraintRight", "_constraintTop", "_currentTarget", "_fireDisabledEH"];
|
||||||
private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"];
|
private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"];
|
||||||
private["_offsetX", "_offsetY", "_pos", "_randomLockInterval", "_randomPosWithinBounds", "_range"];
|
private["_offsetX", "_offsetY", "_pos", "_randomLockInterval", "_randomPosWithinBounds", "_range"];
|
||||||
private["_runTime", "_soundTime", "_targetArray", "_zamerny"];
|
private["_runTime", "_soundTime", "_targetArray", "_zamerny", "_currentShooter"];
|
||||||
|
|
||||||
|
_currentShooter = (vehicle ACE_player);
|
||||||
|
|
||||||
#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5
|
#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5
|
||||||
#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5
|
#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5
|
||||||
@ -128,7 +130,7 @@ FUNC(disableFire) = {
|
|||||||
|
|
||||||
if(_firedEH < 0 && difficulty > 0) then {
|
if(_firedEH < 0 && difficulty > 0) then {
|
||||||
_firedEH = [ACE_player, "DefaultAction", {true}, {
|
_firedEH = [ACE_player, "DefaultAction", {true}, {
|
||||||
_canFire = ACE_player getVariable["ace_missileguidance_target", nil];
|
_canFire = _this getVariable["ace_missileguidance_target", nil];
|
||||||
if(!isNil "_canFire") exitWith { false };
|
if(!isNil "_canFire") exitWith { false };
|
||||||
true
|
true
|
||||||
}] call EFUNC(common,addActionEventHandler);
|
}] call EFUNC(common,addActionEventHandler);
|
||||||
@ -155,7 +157,7 @@ if (isNull _newTarget) then {
|
|||||||
__JavelinIGUITargetingLines ctrlShow false;
|
__JavelinIGUITargetingLines ctrlShow false;
|
||||||
__JavelinIGUITargetingConstraints ctrlShow false;
|
__JavelinIGUITargetingConstraints ctrlShow false;
|
||||||
|
|
||||||
ACE_player setVariable ["ace_missileguidance_target",nil, false];
|
_currentShooter setVariable ["ace_missileguidance_target",nil, false];
|
||||||
|
|
||||||
// Disallow fire
|
// Disallow fire
|
||||||
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
|
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
|
||||||
@ -212,7 +214,7 @@ if (isNull _newTarget) then {
|
|||||||
|
|
||||||
{_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR];
|
{_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR];
|
||||||
|
|
||||||
ACE_player setVariable["ace_missileguidance_target", _currentTarget, false];
|
_currentShooter setVariable["ace_missileguidance_target", _currentTarget, false];
|
||||||
|
|
||||||
// Allow fire
|
// Allow fire
|
||||||
_fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire);
|
_fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire);
|
||||||
@ -227,7 +229,7 @@ if (isNull _newTarget) then {
|
|||||||
__JavelinIGUITargetingConstrains ctrlShow true;
|
__JavelinIGUITargetingConstrains ctrlShow true;
|
||||||
__JavelinIGUITargetingLines ctrlShow false;
|
__JavelinIGUITargetingLines ctrlShow false;
|
||||||
|
|
||||||
ACE_player setVariable["ace_missileguidance_target", nil, false];
|
_currentShooter setVariable["ace_missileguidance_target", nil, false];
|
||||||
|
|
||||||
_boundsInput = if (_currentTarget isKindOf "CAManBase") then {
|
_boundsInput = if (_currentTarget isKindOf "CAManBase") then {
|
||||||
[_newTarget,[-1,-1,-2],_currentTarget selectionPosition "body"];
|
[_newTarget,[-1,-1,-2],_currentTarget selectionPosition "body"];
|
||||||
@ -270,7 +272,7 @@ if (isNull _newTarget) then {
|
|||||||
__JavelinIGUITargetingLines ctrlShow false;
|
__JavelinIGUITargetingLines ctrlShow false;
|
||||||
__JavelinIGUITargetingConstraints ctrlShow false;
|
__JavelinIGUITargetingConstraints ctrlShow false;
|
||||||
|
|
||||||
ACE_player setVariable ["ace_missileguidance_target",nil, false];
|
_currentShooter setVariable ["ace_missileguidance_target",nil, false];
|
||||||
|
|
||||||
// Disallow fire
|
// Disallow fire
|
||||||
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
|
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
|
||||||
|
@ -33,7 +33,8 @@ uiNameSpace setVariable [QGVAR(arguments),
|
|||||||
|
|
||||||
|
|
||||||
_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil];
|
_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil];
|
||||||
if(isNil "_pfh_handle") then {
|
if(!isNil "_pfh_handle") then {
|
||||||
|
[] call FUNC(onOpticUnload); // Unload optic if it was already loaded
|
||||||
|
};
|
||||||
_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;
|
_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;
|
||||||
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle];
|
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle];
|
||||||
};
|
|
@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_playerDir", "_windSpeed", "_windDir", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"];
|
private ["_playerDir", "_windSpeed", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"];
|
||||||
|
|
||||||
if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then {
|
if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then {
|
||||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2);
|
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2);
|
||||||
|
@ -43,8 +43,6 @@ if (GVAR(Kestrel4500) && dialog) then {
|
|||||||
GVAR(Overlay) = true;
|
GVAR(Overlay) = true;
|
||||||
|
|
||||||
[{
|
[{
|
||||||
private ["_outputData", "_updateTimer"];
|
|
||||||
|
|
||||||
// abort condition
|
// abort condition
|
||||||
if (!GVAR(Overlay) || {!(("ACE_Kestrel4500" in (uniformItems ACE_player)) || ("ACE_Kestrel4500" in (vestItems ACE_player)))}) exitWith {
|
if (!GVAR(Overlay) || {!(("ACE_Kestrel4500" in (uniformItems ACE_player)) || ("ACE_Kestrel4500" in (vestItems ACE_player)))}) exitWith {
|
||||||
GVAR(Overlay) = false;
|
GVAR(Overlay) = false;
|
||||||
@ -55,6 +53,7 @@ GVAR(Overlay) = true;
|
|||||||
if (diag_tickTime > GVAR(updateTimer)) then {
|
if (diag_tickTime > GVAR(updateTimer)) then {
|
||||||
GVAR(updateTimer) = diag_tickTime + 1;
|
GVAR(updateTimer) = diag_tickTime + 1;
|
||||||
|
|
||||||
|
private ["_outputData"];
|
||||||
_outputData = [] call FUNC(generateOutputData);
|
_outputData = [] call FUNC(generateOutputData);
|
||||||
|
|
||||||
3 cutRsc ["RscKestrel4500", "PLAIN", 1, false];
|
3 cutRsc ["RscKestrel4500", "PLAIN", 1, false];
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_playerDir", "_textTop", "_textCenterBig", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_temperature", "_humidity", "_windSpeed", "_windDir", "_newWindSpeed", "_windSource", "_height"];
|
private ["_playerDir", "_textTop", "_textCenterBig", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_temperature", "_humidity", "_windSpeed", "_windDir"];
|
||||||
|
|
||||||
[] call FUNC(collectData);
|
[] call FUNC(collectData);
|
||||||
|
|
||||||
|
@ -53,4 +53,4 @@ _structuredOutputText = _structuredOutputText + format ["<img align='center' siz
|
|||||||
// } forEach (magazinesAmmoFull ACE_player);
|
// } forEach (magazinesAmmoFull ACE_player);
|
||||||
// _structuredOutputText = _structuredOutputText + format [("<t align='center'>" + (localize "STR_ACE_MagazineRepack_RepackedMagazinesCount") + "</t>"), _fullMags, _partialMags];
|
// _structuredOutputText = _structuredOutputText + format [("<t align='center'>" + (localize "STR_ACE_MagazineRepack_RepackedMagazinesCount") + "</t>"), _fullMags, _partialMags];
|
||||||
|
|
||||||
[parseText _structuredOutputText] call EFUNC(common,displayTextStructured);
|
[parseText _structuredOutputText, 2] call EFUNC(common,displayTextStructured);
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
#include "\x\cba\addons\main\script_macros_common.hpp"
|
#include "\x\cba\addons\main\script_macros_common.hpp"
|
||||||
#include "\x\cba\addons\xeh\script_xeh.hpp"
|
#include "\x\cba\addons\xeh\script_xeh.hpp"
|
||||||
|
|
||||||
|
//Faster Array Unwraping (skips the IS_ARRAY check normaly found in EXPLODE_1_SYS)
|
||||||
|
#undef EXPLODE_2_SYS
|
||||||
|
#define EXPLODE_1_SYS_FAST(ARRAY,A) A =(ARRAY) select 0
|
||||||
|
#define EXPLODE_2_SYS(ARRAY,A,B) EXPLODE_1_SYS_FAST(ARRAY,A); B = (ARRAY) select 1
|
||||||
|
|
||||||
// Default versioning level
|
// Default versioning level
|
||||||
#define DEFAULT_VERSIONING_LEVEL 2
|
#define DEFAULT_VERSIONING_LEVEL 2
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ class ACE_Head {
|
|||||||
displayName = "$STR_ACE_Interaction_Head";
|
displayName = "$STR_ACE_Interaction_Head";
|
||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
@ -70,11 +71,18 @@ class ACE_Head {
|
|||||||
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment));
|
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment));
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
};
|
};
|
||||||
|
class Diagnose: CheckPulse {
|
||||||
|
displayName = "Diagnose";
|
||||||
|
condition = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(canTreatCached));
|
||||||
|
statement = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(treatment));
|
||||||
|
EXCEPTIONS
|
||||||
|
};
|
||||||
};
|
};
|
||||||
class ACE_Torso {
|
class ACE_Torso {
|
||||||
displayName = "$STR_ACE_Interaction_Torso";
|
displayName = "$STR_ACE_Interaction_Torso";
|
||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
@ -175,6 +183,7 @@ class ACE_ArmLeft {
|
|||||||
displayName = "$STR_ACE_Interaction_ArmLeft";
|
displayName = "$STR_ACE_Interaction_ArmLeft";
|
||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
@ -332,6 +341,7 @@ class ACE_ArmRight {
|
|||||||
displayName = "$STR_ACE_Interaction_ArmRight";
|
displayName = "$STR_ACE_Interaction_ArmRight";
|
||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
@ -486,6 +496,7 @@ class ACE_LegLeft {
|
|||||||
displayName = "$STR_ACE_Interaction_LegLeft";
|
displayName = "$STR_ACE_Interaction_LegLeft";
|
||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
@ -628,6 +639,7 @@ class ACE_LegRight {
|
|||||||
displayName = "$STR_ACE_Interaction_LegRight";
|
displayName = "$STR_ACE_Interaction_LegRight";
|
||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
@ -12,6 +12,7 @@ class Medical {
|
|||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
|
|
||||||
@ -80,6 +81,7 @@ class Medical {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
priority = 2;
|
priority = 2;
|
||||||
hotkey = "";
|
hotkey = "";
|
||||||
@ -148,6 +150,7 @@ class Medical {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
|
||||||
@ -249,6 +252,7 @@ class Medical {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
|
||||||
@ -346,6 +350,7 @@ class Medical {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
|
||||||
@ -432,6 +437,7 @@ class Medical {
|
|||||||
runOnHover = 1;
|
runOnHover = 1;
|
||||||
exceptions[] = {"isNotInside"};
|
exceptions[] = {"isNotInside"};
|
||||||
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation));
|
||||||
|
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction));
|
||||||
condition = "true";
|
condition = "true";
|
||||||
icon = PATHTOF(UI\icons\medical_cross.paa);
|
icon = PATHTOF(UI\icons\medical_cross.paa);
|
||||||
|
|
||||||
|
@ -71,14 +71,14 @@ class ACE_Medical_Actions {
|
|||||||
itemConsumed = 1;
|
itemConsumed = 1;
|
||||||
litter[] = {};
|
litter[] = {};
|
||||||
};
|
};
|
||||||
class CheckPulse: Bandage {
|
class Diagnose: Bandage {
|
||||||
displayName = "";
|
displayName = "Diagnose";
|
||||||
displayNameProgress = "";
|
displayNameProgress = "Diagnosing...";
|
||||||
treatmentLocations[] = {"All"};
|
treatmentLocations[] = {"All"};
|
||||||
requiredMedic = 0;
|
requiredMedic = 0;
|
||||||
treatmentTime = 2;
|
treatmentTime = 1;
|
||||||
items[] = {};
|
items[] = {};
|
||||||
callbackSuccess = QUOTE(DFUNC(actionCheckPulse));
|
callbackSuccess = QUOTE(DFUNC(actionDiagnose));
|
||||||
callbackFailure = "";
|
callbackFailure = "";
|
||||||
callbackProgress = "";
|
callbackProgress = "";
|
||||||
animationPatient = "";
|
animationPatient = "";
|
||||||
@ -86,12 +86,6 @@ class ACE_Medical_Actions {
|
|||||||
itemConsumed = 0;
|
itemConsumed = 0;
|
||||||
litter[] = {};
|
litter[] = {};
|
||||||
};
|
};
|
||||||
class CheckBloodPressure: CheckPulse {
|
|
||||||
callbackSuccess = QUOTE(DFUNC(actionCheckBloodPressure));
|
|
||||||
};
|
|
||||||
class CheckResponse: CheckPulse {
|
|
||||||
callbackSuccess = QUOTE(DFUNC(actionCheckResponse));
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Advanced {
|
class Advanced {
|
||||||
|
@ -7,6 +7,7 @@ PREP(actionCheckBloodPressureLocal);
|
|||||||
PREP(actionCheckPulse);
|
PREP(actionCheckPulse);
|
||||||
PREP(actionCheckPulseLocal);
|
PREP(actionCheckPulseLocal);
|
||||||
PREP(actionCheckResponse);
|
PREP(actionCheckResponse);
|
||||||
|
PREP(actionDiagnose);
|
||||||
PREP(actionPlaceInBodyBag);
|
PREP(actionPlaceInBodyBag);
|
||||||
PREP(actionRemoveTourniquet);
|
PREP(actionRemoveTourniquet);
|
||||||
PREP(actionLoadUnit);
|
PREP(actionLoadUnit);
|
||||||
@ -55,6 +56,7 @@ PREP(isInMedicalVehicle);
|
|||||||
PREP(isMedic);
|
PREP(isMedic);
|
||||||
PREP(isMedicalVehicle);
|
PREP(isMedicalVehicle);
|
||||||
PREP(itemCheck);
|
PREP(itemCheck);
|
||||||
|
PREP(modifyMedicalAction);
|
||||||
PREP(onMedicationUsage);
|
PREP(onMedicationUsage);
|
||||||
PREP(onWoundUpdateRequest);
|
PREP(onWoundUpdateRequest);
|
||||||
PREP(onPropagateWound);
|
PREP(onPropagateWound);
|
||||||
|
41
addons/medical/functions/fnc_actionDiagnose.sqf
Normal file
41
addons/medical/functions/fnc_actionDiagnose.sqf
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* Author: Glowbal
|
||||||
|
* Action for diagnosing in basic medical
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: The medic <OBJECT>
|
||||||
|
* 1: The patient <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* NONE
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_caller","_target","_title","_content"];
|
||||||
|
_caller = _this select 0;
|
||||||
|
_target = _this select 1;
|
||||||
|
|
||||||
|
_genericMessages = ["STR_ACE_MEDICAL_diagnoseMessage"];
|
||||||
|
|
||||||
|
_genericMessages pushBack ([_target] call EFUNC(common,getName));
|
||||||
|
if (alive _target) then {
|
||||||
|
_genericMessages pushback "STR_ACE_MEDICAL_diagnoseAlive";
|
||||||
|
} else {
|
||||||
|
_genericMessages pushback "STR_ACE_MEDICAL_diagnoseDead";
|
||||||
|
};
|
||||||
|
if (_target getvariable[QGVAR(hasLostBlood), false]) then {
|
||||||
|
_genericMessages pushback "STR_ACE_MEDICAL_lostBlood";
|
||||||
|
} else {
|
||||||
|
_genericMessages pushback "STR_ACE_MEDICAL_noBloodloss";
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_target getvariable[QGVAR(hasPain), false]) then {
|
||||||
|
_genericMessages pushback "STR_ACE_MEDICAL_inPain";
|
||||||
|
} else {
|
||||||
|
_genericMessages pushback "STR_ACE_MEDICAL_noPain";
|
||||||
|
};
|
||||||
|
|
||||||
|
["displayTextStructured", [_caller], [_genericMessages, 3.0, _caller]] call EFUNC(common,targetEvent);
|
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
// Exit for basic medical
|
||||||
|
if (GVAR(level) < 2) exitWith {};
|
||||||
private ["_target", "_show", "_selectionN"];
|
private ["_target", "_show", "_selectionN"];
|
||||||
_target = _this select 0;
|
_target = _this select 0;
|
||||||
_show = if (count _this > 1) then {_this select 1} else {true};
|
_show = if (count _this > 1) then {_this select 1} else {true};
|
||||||
|
40
addons/medical/functions/fnc_modifyMedicalAction.sqf
Normal file
40
addons/medical/functions/fnc_modifyMedicalAction.sqf
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Author: esteldunedain
|
||||||
|
* Modify the visuals of a medical action point.
|
||||||
|
* On Basic medical: modify the icon color based on damage on that body part.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: The Patient Unit <OBJECT>
|
||||||
|
* 1: The Diagnosing Unit <OBJECT>
|
||||||
|
* 2: Selection Number <NUMBER>
|
||||||
|
* 3: The action to modify <OBJECT>
|
||||||
|
*
|
||||||
|
* ReturnValue:
|
||||||
|
* nil
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
EXPLODE_4_PVT(_this,_target,_player,_selectionN,_actionData);
|
||||||
|
if (GVAR(level) < 2) exitwith {
|
||||||
|
private ["_pointDamage"];
|
||||||
|
_pointDamage = _target getHitPointDamage (["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] select _selectionN);
|
||||||
|
|
||||||
|
if (_pointDamage >= 0.8) exitWith {
|
||||||
|
_actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))];
|
||||||
|
};
|
||||||
|
if (_pointDamage > 0) exitWith {
|
||||||
|
_actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossYellow.paa))];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
private ["_openWounds", "_amountOf"];
|
||||||
|
_openWounds = _target getvariable [QGVAR(openWounds), []];
|
||||||
|
{
|
||||||
|
_amountOf = _x select 3;
|
||||||
|
if (_amountOf > 0 && {(_selectionN == (_x select 2))}) exitwith {
|
||||||
|
_actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))];
|
||||||
|
};
|
||||||
|
}foreach _openWounds;
|
@ -5,11 +5,13 @@
|
|||||||
<English>Litter Simulation Detail</English>
|
<English>Litter Simulation Detail</English>
|
||||||
<Polish>Detale zużytych medykamentów</Polish>
|
<Polish>Detale zużytych medykamentów</Polish>
|
||||||
<Spanish>Detalle de simulación de basura</Spanish>
|
<Spanish>Detalle de simulación de basura</Spanish>
|
||||||
|
<Russian>Количество мусора от медицины</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Medical_litterSimulationDetail_Desc">
|
<Key ID="STR_ACE_Medical_litterSimulationDetail_Desc">
|
||||||
<English>Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting.</English>
|
<English>Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting.</English>
|
||||||
<Polish>Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta.</Polish>
|
<Polish>Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta.</Polish>
|
||||||
<Spanish>Detalle simulación de basura establece el número de artículos de basura que se generan a nivel local en el cliente. Las cantidades excesivas en áreas locales podrían causar caída de rendimiento, así que esto es un ajuste de cliente únicamente.</Spanish>
|
<Spanish>Detalle simulación de basura establece el número de artículos de basura que se generan a nivel local en el cliente. Las cantidades excesivas en áreas locales podrían causar caída de rendimiento, así que esto es un ajuste de cliente únicamente.</Spanish>
|
||||||
|
<Russian>Устанавливает количество мусора, который появляется после использования мед. препаратов. Большое количество мусора может уменьшить производительность, поэтому данная настройка локальна для клиента.</Russian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Medical_Inject_Atropine">
|
<Key ID="STR_ACE_Medical_Inject_Atropine">
|
||||||
<English>Inject Atropine</English>
|
<English>Inject Atropine</English>
|
||||||
@ -1322,6 +1324,28 @@
|
|||||||
<Hungarian>Megnézted %1-t</Hungarian>
|
<Hungarian>Megnézted %1-t</Hungarian>
|
||||||
<Italian>Hai controllato %1</Italian>
|
<Italian>Hai controllato %1</Italian>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MEDICAL_diagnoseMessage">
|
||||||
|
<English>Patient %1<br/>is %2.<br/>%3.<br/>%4</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MEDICAL_diagnoseAlive">
|
||||||
|
<English>alive</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MEDICAL_diagnoseDead">
|
||||||
|
<English>dead</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MEDICAL_lostBlood">
|
||||||
|
<English>He's lost some blood</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MEDICAL_noBloodloss">
|
||||||
|
<English>He hasn't lost blood</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MEDICAL_inPain">
|
||||||
|
<English>He is in pain</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MEDICAL_noPain">
|
||||||
|
<English>He is not in pain</English>
|
||||||
|
</Key>
|
||||||
|
|
||||||
<Key ID="STR_ACE_MEDICAL_BANDAGED">
|
<Key ID="STR_ACE_MEDICAL_BANDAGED">
|
||||||
<English>Bandaged</English>
|
<English>Bandaged</English>
|
||||||
<French>Bandé</French>
|
<French>Bandé</French>
|
||||||
|
BIN
addons/medical/ui/icons/medical_crossRed.paa
Normal file
BIN
addons/medical/ui/icons/medical_crossRed.paa
Normal file
Binary file not shown.
BIN
addons/medical/ui/icons/medical_crossYellow.paa
Normal file
BIN
addons/medical/ui/icons/medical_crossYellow.paa
Normal file
Binary file not shown.
1
addons/mk6mortar/$PBOPREFIX$
Normal file
1
addons/mk6mortar/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
z\ace\Addons\mk6mortar
|
17
addons/mk6mortar/CfgEventHandlers.hpp
Normal file
17
addons/mk6mortar/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
class Extended_PreInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Extended_PostInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) );
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Extended_FiredBIS_EventHandlers {
|
||||||
|
class Mortar_01_base_F {
|
||||||
|
class ADDON {
|
||||||
|
firedBIS = QUOTE(_this call FUNC(handleFired));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
83
addons/mk6mortar/CfgVehicles.hpp
Normal file
83
addons/mk6mortar/CfgVehicles.hpp
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
class CfgVehicles {
|
||||||
|
class Man;
|
||||||
|
class CAManBase: Man {
|
||||||
|
class ACE_SelfActions {
|
||||||
|
class ACE_Equipment {
|
||||||
|
class GVAR(rangetable) {
|
||||||
|
displayName = "$STR_ACE_MK6MORTAR_rangetable_action";
|
||||||
|
condition = QUOTE(_this call FUNC(rangeTableCanUse));
|
||||||
|
statement = QUOTE(_this call FUNC(rangeTableOpen));
|
||||||
|
priority = 0;
|
||||||
|
icon = QUOTE(PATHTOF(UI\icon_rangeTable.paa));
|
||||||
|
exceptions[] = {"notOnMap", "isNotInside"};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class LandVehicle;
|
||||||
|
class StaticWeapon: LandVehicle {
|
||||||
|
class Turrets {
|
||||||
|
class MainTurret;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class StaticMortar: StaticWeapon {
|
||||||
|
class Turrets: Turrets {
|
||||||
|
class MainTurret: MainTurret {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class Mortar_01_base_F: StaticMortar {
|
||||||
|
class Turrets: Turrets {
|
||||||
|
class MainTurret: MainTurret {
|
||||||
|
turretInfoType = "ACE_Mk6_RscWeaponRangeArtillery";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class ACE_SelfActions {
|
||||||
|
class GVAR(toggleMils) {
|
||||||
|
displayName = "Toggle MILS";
|
||||||
|
condition = QUOTE(true);
|
||||||
|
statement = QUOTE(_this call FUNC(toggleMils));
|
||||||
|
exceptions[] = {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Logic;
|
||||||
|
class Module_F: Logic {
|
||||||
|
class ModuleDescription {};
|
||||||
|
};
|
||||||
|
class GVAR(module): Module_F {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
|
category = "ACE";
|
||||||
|
displayName = "MK6 Settings";
|
||||||
|
function = QFUNC(moduleInit);
|
||||||
|
scope = 2;
|
||||||
|
isGlobal = 0;
|
||||||
|
icon = QUOTE(PATHTOF(UI\Icon_Module_mk6_ca.paa));
|
||||||
|
functionPriority = 0;
|
||||||
|
class Arguments {
|
||||||
|
class airResistanceEnabled {
|
||||||
|
displayName = "Air Resitance";
|
||||||
|
description = "For Player Shots, Model Air Restiance and Wind Effects";
|
||||||
|
typeName = "BOOL";
|
||||||
|
defaultValue = 1;
|
||||||
|
};
|
||||||
|
class allowComputerRangefinder {
|
||||||
|
displayName = "Allow MK6 Computer";
|
||||||
|
description = "Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance)";
|
||||||
|
typeName = "BOOL";
|
||||||
|
defaultValue = 0;
|
||||||
|
};
|
||||||
|
class allowCompass {
|
||||||
|
displayName = "Allow MK6 Compass";
|
||||||
|
description = "Show the MK6 Digital Compass";
|
||||||
|
typeName = "BOOL";
|
||||||
|
defaultValue = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class ModuleDescription: ModuleDescription {
|
||||||
|
description = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
15
addons/mk6mortar/CfgWeapons.hpp
Normal file
15
addons/mk6mortar/CfgWeapons.hpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
class CfgWeapons {
|
||||||
|
class ACE_ItemCore;
|
||||||
|
class InventoryItem_Base_F;
|
||||||
|
|
||||||
|
class ACE_RangeTable_82mm: ACE_ItemCore {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
|
scope = 2;
|
||||||
|
displayName = "$STR_ACE_MK6MORTAR_rangetable_name";
|
||||||
|
descriptionShort = "$STR_ACE_MK6MORTAR_rangetable_description";
|
||||||
|
picture = QUOTE(PATHTOF(UI\icon_rangeTable.paa));
|
||||||
|
class ItemInfo: InventoryItem_Base_F {
|
||||||
|
mass = 0.5;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
10
addons/mk6mortar/README.md
Normal file
10
addons/mk6mortar/README.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
ace_mk6mortar
|
||||||
|
==========
|
||||||
|
|
||||||
|
Tweaks the mk6 mortar from Arma3
|
||||||
|
|
||||||
|
## Maintainers
|
||||||
|
|
||||||
|
The people responsible for merging changes to this component or answering potential questions.
|
||||||
|
|
||||||
|
- [PabstMirror](https://github.com/PabstMirror)
|
44
addons/mk6mortar/RscInGameUI.hpp
Normal file
44
addons/mk6mortar/RscInGameUI.hpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
class RscInGameUI {
|
||||||
|
class RscWeaponRangeArtillery {
|
||||||
|
class CA_IGUI_elements_group: RscControlsGroup {};
|
||||||
|
};
|
||||||
|
class ACE_Mk6_RscWeaponRangeArtillery: RscWeaponRangeArtillery {
|
||||||
|
onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_Mk6_RscWeaponRangeArtillery',(_this select 0))]; _this call FUNC(turretDisplayLoaded););
|
||||||
|
controls[] = {"ACE_MILS_GROUP", "CA_IGUI_elements_group","CA_RangeElements_group"};
|
||||||
|
class ACE_MILS_GROUP: CA_IGUI_elements_group {
|
||||||
|
idc = 80170;
|
||||||
|
class controls {
|
||||||
|
class CA_Heading_MILS: RscText {
|
||||||
|
idc = 80156;
|
||||||
|
style = 2;
|
||||||
|
colorText[] = {0.706,0.0745,0.0196,1};
|
||||||
|
sizeEx = "0.028*SafezoneH";
|
||||||
|
shadow = 0;
|
||||||
|
font = "EtelkaMonospacePro";
|
||||||
|
text = "015";
|
||||||
|
x = "25.0 * (0.01875 * SafezoneH)";
|
||||||
|
y = "6.3 * (0.025 * SafezoneH)";
|
||||||
|
w = "3.3333 * (0.01875 * SafezoneH)";
|
||||||
|
h = "1 * (0.025 * SafezoneH)";
|
||||||
|
};
|
||||||
|
class CA_Elev_MILS: RscText {
|
||||||
|
idc = 80175;
|
||||||
|
style = 1;
|
||||||
|
sizeEx = "0.038*SafezoneH";
|
||||||
|
colorText[] = {0.706,0.0745,0.0196,1};
|
||||||
|
shadow = 0;
|
||||||
|
font = "EtelkaMonospacePro";
|
||||||
|
text = "80.5";
|
||||||
|
x = "36.8 * (0.01875 * SafezoneH)";
|
||||||
|
y = "29.3 * (0.025 * SafezoneH)";
|
||||||
|
w = "5.2 * (0.01875 * SafezoneH)";
|
||||||
|
h = "1.2 * (0.025 * SafezoneH)";
|
||||||
|
};
|
||||||
|
class CA_Elev_Need_MILS: CA_Elev_MILS {
|
||||||
|
idc = 80176;
|
||||||
|
y = "30.8 * (0.025 * SafezoneH)";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
87
addons/mk6mortar/RscRangeTable.hpp
Normal file
87
addons/mk6mortar/RscRangeTable.hpp
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
class ACE_82mm_RangeTable_Dialog {
|
||||||
|
idd = -1;
|
||||||
|
movingEnable = 1;
|
||||||
|
onLoad = "uiNamespace setVariable ['ACE_82mm_RangeTable_Dialog', _this select 0];";
|
||||||
|
objects[] = {};
|
||||||
|
|
||||||
|
class ControlsBackground {
|
||||||
|
class TableBackground: RscPicture {
|
||||||
|
idc = -1;
|
||||||
|
text = QUOTE(PATHTOF(UI\RangeTable_background.paa));
|
||||||
|
x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||||
|
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||||
|
w = "16.2634559672906 * (safeZoneH / 40)";
|
||||||
|
h = "23 * ((safeZoneH / 1.2) / 25)";
|
||||||
|
colorBackground[] = {1,1,1,1};
|
||||||
|
};
|
||||||
|
class ChargeBackground: RscText {
|
||||||
|
idc = -1;
|
||||||
|
x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||||
|
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||||
|
w = "4 * (safeZoneH / 40)";
|
||||||
|
h = "5 * ((safeZoneH / 1.2) / 25)";
|
||||||
|
colorBackground[] = {0,0,0,1};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class controls {
|
||||||
|
class TheTable: RscListNBox {
|
||||||
|
idc = 20001;
|
||||||
|
// style = ST_CENTER + ST_MULTI + LB_TEXTURES;
|
||||||
|
// style = ST_LEFT + ST_MULTI + LB_TEXTURES;
|
||||||
|
// style = LB_MULTI + ST_LEFT; // Style
|
||||||
|
x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||||
|
y = "3.76 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||||
|
w = "16.2634559672906 * (safeZoneH / 40)";
|
||||||
|
h = "20.24 * ((safeZoneH / 1.2) / 25)";
|
||||||
|
columns[] = {(10/867),(86/867),(171/867),(238/867),(320/867),(405/867),
|
||||||
|
(485/867),(546/867),(607/867),(668/867),(729/867),(790/867)};
|
||||||
|
rowHeight = 0.015 * safeZoneH;
|
||||||
|
sizeEx = "0.014 * safeZoneH";
|
||||||
|
font = "EtelkaMonospacePro";
|
||||||
|
drawSideArrows = 1;
|
||||||
|
idcLeft = 14124;
|
||||||
|
idcRight = 412343243;
|
||||||
|
colorText[] = {0, 0, 0, 1};
|
||||||
|
shadow = "0";
|
||||||
|
// colorBorder[] = {1,0,0,1};
|
||||||
|
// colorBackground[] = {1, 0, 0, 1};
|
||||||
|
colorSelectBackground[] = {0, 0, 0, 0.025};
|
||||||
|
colorSelectBackground2[] = {0, 0, 0, 0.025};
|
||||||
|
colorScrollbar[] = {0.95,0,0.95,1};
|
||||||
|
class ListScrollBar: ScrollBar{
|
||||||
|
color[] = {0,0,0,0.6};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class ChargeListBox: RscListbox {
|
||||||
|
idc = 1501;
|
||||||
|
style = ST_RIGHT;
|
||||||
|
x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||||
|
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||||
|
w = "4 * (safeZoneH / 40)";
|
||||||
|
h = "5 * ((safeZoneH / 1.2) / 25)";
|
||||||
|
onLBSelChanged = QUOTE(_this call FUNC(rangeTablePageChange));
|
||||||
|
};
|
||||||
|
class CloseBackground: RscText {
|
||||||
|
idc = -1;
|
||||||
|
x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||||
|
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||||
|
w = "0.5 * (safeZoneH / 40)";
|
||||||
|
h = "0.5 * ((safeZoneH / 1.2) / 25)";
|
||||||
|
colorBackground[] = {0,0,0,0.5};
|
||||||
|
};
|
||||||
|
class CloseActiveText: RscActiveText {
|
||||||
|
idc = -1;
|
||||||
|
style = 48;
|
||||||
|
color[] = {1,1,1,0.7};
|
||||||
|
text = "A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa";
|
||||||
|
x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
|
||||||
|
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
|
||||||
|
w = "0.5 * (safeZoneH / 40)";
|
||||||
|
h = "0.5 * ((safeZoneH / 1.2) / 25)";
|
||||||
|
colorText[] = {1,1,1,0.7};
|
||||||
|
colorActive[] = {1,1,1,1};
|
||||||
|
tooltip = "Close";
|
||||||
|
onButtonClick = "closeDialog 0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
BIN
addons/mk6mortar/UI/Icon_Module_mk6_ca.paa
Normal file
BIN
addons/mk6mortar/UI/Icon_Module_mk6_ca.paa
Normal file
Binary file not shown.
BIN
addons/mk6mortar/UI/RangeTable_background.paa
Normal file
BIN
addons/mk6mortar/UI/RangeTable_background.paa
Normal file
Binary file not shown.
BIN
addons/mk6mortar/UI/icon_rangeTable.paa
Normal file
BIN
addons/mk6mortar/UI/icon_rangeTable.paa
Normal file
Binary file not shown.
BIN
addons/mk6mortar/UI/ui_charges.paa
Normal file
BIN
addons/mk6mortar/UI/ui_charges.paa
Normal file
Binary file not shown.
5
addons/mk6mortar/XEH_clientInit.sqf
Normal file
5
addons/mk6mortar/XEH_clientInit.sqf
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
|
["playerVehicleChanged", {_this call FUNC(handlePlayerVehicleChanged);}] call EFUNC(common,addEventHandler);
|
21
addons/mk6mortar/XEH_preInit.sqf
Normal file
21
addons/mk6mortar/XEH_preInit.sqf
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
ADDON = false;
|
||||||
|
|
||||||
|
PREP(dev_buildTable);
|
||||||
|
PREP(dev_formatNumber);
|
||||||
|
PREP(dev_simulateCalcRangeTableLine);
|
||||||
|
PREP(dev_simulateFindSolution);
|
||||||
|
PREP(dev_simulateShot);
|
||||||
|
|
||||||
|
PREP(handleFired);
|
||||||
|
PREP(handlePlayerVehicleChanged);
|
||||||
|
PREP(moduleInit);
|
||||||
|
PREP(rangeTableCanUse);
|
||||||
|
PREP(rangeTableOpen);
|
||||||
|
PREP(rangeTablePageChange);
|
||||||
|
PREP(rangeTablePreCalculatedValues);
|
||||||
|
PREP(toggleMils);
|
||||||
|
PREP(turretDisplayLoaded);
|
||||||
|
|
||||||
|
ADDON = true;
|
47
addons/mk6mortar/config.cpp
Normal file
47
addons/mk6mortar/config.cpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
class CfgPatches {
|
||||||
|
class ADDON {
|
||||||
|
units[] = {};
|
||||||
|
weapons[] = {"ACE_RangeTable_82mm"};
|
||||||
|
requiredVersion = REQUIRED_VERSION;
|
||||||
|
requiredAddons[] = {"ace_interaction"};
|
||||||
|
author[] = {"PabstMirror"};
|
||||||
|
authorUrl = "https://github.com/acemod";
|
||||||
|
VERSION_CONFIG;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "CfgEventHandlers.hpp"
|
||||||
|
#include "CfgVehicles.hpp"
|
||||||
|
#include "CfgWeapons.hpp"
|
||||||
|
|
||||||
|
class RscText;
|
||||||
|
class RscListbox;
|
||||||
|
class RscListNBox;
|
||||||
|
class RscPicture;
|
||||||
|
class RscControlsGroup;
|
||||||
|
class ScrollBar;
|
||||||
|
class RscActiveText;
|
||||||
|
|
||||||
|
#include "RscInGameUI.hpp"
|
||||||
|
#include "RscRangeTable.hpp"
|
||||||
|
|
||||||
|
class ACE_Settings {
|
||||||
|
//These settings effect gameplay difficutly: defaults will leave the mortar the same as vanilla
|
||||||
|
class GVAR(airResistanceEnabled) {
|
||||||
|
value = 0;
|
||||||
|
typeName = "BOOL";
|
||||||
|
isClientSetable = 0;
|
||||||
|
};
|
||||||
|
class GVAR(allowComputerRangefinder) {
|
||||||
|
value = 1;
|
||||||
|
typeName = "BOOL";
|
||||||
|
isClientSetable = 0;
|
||||||
|
};
|
||||||
|
class GVAR(allowCompass) {
|
||||||
|
value = 1;
|
||||||
|
typeName = "BOOL";
|
||||||
|
isClientSetable = 0;
|
||||||
|
};
|
||||||
|
};
|
87
addons/mk6mortar/functions/fnc_dev_buildTable.sqf
Normal file
87
addons/mk6mortar/functions/fnc_dev_buildTable.sqf
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay)
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Muzzle Velocity <NUMBER>
|
||||||
|
* 1: Air Friction <NUMBER>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* <Data in clipboard>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [100, -0.0001] spawn ace_mk6mortar_fnc_dev_buildTable; //spawn (scheduled) is slower
|
||||||
|
* [100, -0.0001] call ace_mk6mortar_fnc_dev_buildTable; //faster, but will lock while processing
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
private ["_muzzleVelocity", "_airFriction", "_stillInRange", "_currentRange", "_increasePerRow", "_outputArray", "_rangeToHit", "_lineElevation", "_lineHeightElevation", "_lineTimeOfFlight", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_lineTempDec", "_lineTempInc", "_lineAirDensDec", "_lineAirDensInc", "_result", "_outputString"];
|
||||||
|
|
||||||
|
_muzzleVelocity = _this select 0;
|
||||||
|
_airFriction = _this select 1;
|
||||||
|
_stillInRange = true;
|
||||||
|
_currentRange = 100;
|
||||||
|
_increasePerRow = 50;
|
||||||
|
_outputArray = [];
|
||||||
|
|
||||||
|
|
||||||
|
//[_rangeToHit, _lineElevation, _lineHeightElevation, _lineHeightTimeDelta, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc]
|
||||||
|
|
||||||
|
while {_stillInRange} do {
|
||||||
|
_result = [_muzzleVelocity, _currentRange, _airFriction] call FUNC(dev_simulateCalcRangeTableLine);
|
||||||
|
if (_result isEqualTo []) then {
|
||||||
|
_stillInRange = false;
|
||||||
|
} else {
|
||||||
|
if (_airFriction == 0) then {
|
||||||
|
_result set [4, 0];
|
||||||
|
_result set [5, 0];
|
||||||
|
_result set [6, 0];
|
||||||
|
_result set [7, 0];
|
||||||
|
_result set [8, 0];
|
||||||
|
_result set [9, 0];
|
||||||
|
_result set [10, 0];
|
||||||
|
};
|
||||||
|
if ((_result select 1) < 88) then {
|
||||||
|
_outputArray pushBack [
|
||||||
|
([(_result select 0), "meters", false] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 1), "mil", true] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 2), "mil", true] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 3), "sec", false] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 4), "sec", false] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 5), "milPrecise", true] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 6), "metersprecise", false] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 7), "metersprecise", false] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 8), "metersprecise", false] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 9), "metersprecise", false] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 10), "metersprecise", false] call FUNC(dev_formatNumber)),
|
||||||
|
([(_result select 11), "metersprecise", false] call FUNC(dev_formatNumber))
|
||||||
|
];
|
||||||
|
};
|
||||||
|
_currentRange = _currentRange + _increasePerRow;
|
||||||
|
};
|
||||||
|
hintSilent str _currentRange;
|
||||||
|
};
|
||||||
|
|
||||||
|
//handle floating point rounding errors
|
||||||
|
_outputString = format ["case ((abs(_muzzleVelocity - %1) < 0.00001) && {(abs(_airFriction - %2) < 0.00001)}): {
|
||||||
|
[
|
||||||
|
", _muzzleVelocity, _airFriction];
|
||||||
|
|
||||||
|
{
|
||||||
|
if (_forEachIndex < ((count _outputArray) - 1)) then {
|
||||||
|
_outputString = _outputString + format ["%1,
|
||||||
|
", _x];
|
||||||
|
} else {
|
||||||
|
_outputString = _outputString + format ["%1
|
||||||
|
]
|
||||||
|
};", _x];
|
||||||
|
};
|
||||||
|
} forEach _outputArray;
|
||||||
|
|
||||||
|
copyToClipboard _outputString;
|
||||||
|
rangeTableOutput = _outputString;
|
||||||
|
|
||||||
|
hint "done";
|
80
addons/mk6mortar/functions/fnc_dev_formatNumber.sqf
Normal file
80
addons/mk6mortar/functions/fnc_dev_formatNumber.sqf
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
Author: Pabst Mirror
|
||||||
|
|
||||||
|
Description:
|
||||||
|
Converts numbers into nicely formated strings.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
0: NUMBER - Input number
|
||||||
|
1: STRING - Output type (see case statement)
|
||||||
|
2: BOOL - If output type is mil, convert input type from deg->mil
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
STRING - Formatted number
|
||||||
|
|
||||||
|
Example:
|
||||||
|
[45, "mil4", true] call ace_mk6mortar_fnc_dev_formatNumber = "0800"
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_theNumber", "_inputType", "_convertToMils", "_decimalPlaces", "_integerPlaces", "_prefix", "_return"];
|
||||||
|
|
||||||
|
_theNumber = _this select 0;
|
||||||
|
_inputType = _this select 1;
|
||||||
|
_convertToMils = _this select 2;
|
||||||
|
|
||||||
|
_decimalPlaces = -1;
|
||||||
|
_integerPlaces = -1;
|
||||||
|
|
||||||
|
switch (toLower _inputType) do {
|
||||||
|
case ("meters"): {
|
||||||
|
_decimalPlaces = 0;
|
||||||
|
_integerPlaces = 1;
|
||||||
|
};
|
||||||
|
case ("metersprecise"): {
|
||||||
|
_decimalPlaces = 1;
|
||||||
|
_integerPlaces = 1;
|
||||||
|
};
|
||||||
|
case ("meters4"): {
|
||||||
|
_decimalPlaces = 0;
|
||||||
|
_integerPlaces = 4;
|
||||||
|
};
|
||||||
|
case ("deg3precise"): {
|
||||||
|
_decimalPlaces = 2;
|
||||||
|
_integerPlaces = 3;
|
||||||
|
};
|
||||||
|
case ("mil"): {
|
||||||
|
_decimalPlaces = 0;
|
||||||
|
_integerPlaces = 1;
|
||||||
|
if (_convertToMils) then {
|
||||||
|
_theNumber = _theNumber * (6400 / 360);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
case ("mil4"): {
|
||||||
|
_decimalPlaces = 0;
|
||||||
|
_integerPlaces = 4;
|
||||||
|
if (_convertToMils) then {
|
||||||
|
_theNumber = _theNumber * (6400 / 360);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
case ("milprecise"): {
|
||||||
|
_decimalPlaces = 1;
|
||||||
|
_integerPlaces = 1;
|
||||||
|
if (_convertToMils) then {
|
||||||
|
_theNumber = _theNumber * (6400 / 360);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
case ("sec"): {
|
||||||
|
_decimalPlaces = 1;
|
||||||
|
_integerPlaces = 1;
|
||||||
|
};
|
||||||
|
default {systemChat format ["badtype %1", _inputType];};
|
||||||
|
};
|
||||||
|
|
||||||
|
//CBA_fnc_formatNumber is silly: [-9.58545, 1, 1, false] call CBA_fnc_formatNumber == "-9.-6"
|
||||||
|
|
||||||
|
_prefix = if (_theNumber < 0) then {"-"} else {""};
|
||||||
|
|
||||||
|
_return = [abs (_theNumber), _integerPlaces, _decimalPlaces, false] call CBA_fnc_formatNumber;
|
||||||
|
|
||||||
|
(_prefix + _return)
|
@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
Author: Pabst Mirror
|
||||||
|
|
||||||
|
Description:
|
||||||
|
Builds a rangeTable line for a certian range, given muzzle velocity and air friction, returns [] if out of range.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
0: NUMBER - Muzzle Velocity
|
||||||
|
1: NUMBER - Air Friction
|
||||||
|
2: NUMBER - Range To Hit
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
ARRAY - Range Table Line Data (see return line)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
[300, -0.0001, 3000] call ace_mk6mortar_fnc_simulateCalcRangeTableLine
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
#define TIME_STEP (1/50)
|
||||||
|
|
||||||
|
private ["_startTime", "_muzzleVelocity", "_rangeToHit", "_airFriction", "_vacElevation", "_radicand", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts", "_lineElevation", "_lineTimeOfFlight", "_lineHeightElevation", "_lineHeightTimeDelta", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_result"];
|
||||||
|
|
||||||
|
_startTime = diag_tickTime;
|
||||||
|
|
||||||
|
_muzzleVelocity = _this select 0;
|
||||||
|
_rangeToHit = _this select 1;
|
||||||
|
_airFriction = _this select 2;
|
||||||
|
|
||||||
|
//Run Binary search for correct elevation
|
||||||
|
_solution = [_rangeToHit, 0, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(dev_simulateFindSolution);
|
||||||
|
if (_solution isEqualTo []) exitWith {[]};
|
||||||
|
|
||||||
|
//Real Elevation
|
||||||
|
_lineElevation = _solution select 0;
|
||||||
|
|
||||||
|
//Time Of Flight:
|
||||||
|
_lineTimeOfFlight = _solution select 1;
|
||||||
|
|
||||||
|
//Height Adjustment for -100m (another binary search)
|
||||||
|
_solution = [_rangeToHit, -100, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(dev_simulateFindSolution);
|
||||||
|
if (_solution isEqualTo []) exitWith {[]};//should never be triggered (lower elevation easier to hit)
|
||||||
|
|
||||||
|
_lineHeightElevation = ((_solution select 0) - _lineElevation);
|
||||||
|
_lineHeightTimeDelta = (_solution select 1) - _lineTimeOfFlight;
|
||||||
|
|
||||||
|
//Compute for 10x and divide to minimize rounding errors
|
||||||
|
|
||||||
|
//Crosswind
|
||||||
|
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 10, 0, TIME_STEP] call FUNC(dev_simulateShot);
|
||||||
|
_lineCrosswindDeg = (_lastTestResult select 2) / 10;
|
||||||
|
|
||||||
|
//Headwind:
|
||||||
|
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, -10, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
|
||||||
|
_lineHeadwindMeters = (_rangeToHit - (_lastTestResult select 0)) / 10;
|
||||||
|
|
||||||
|
//TailWind:
|
||||||
|
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, 10, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
|
||||||
|
_lineTailWindMeters = (_rangeToHit - (_lastTestResult select 0)) / 10;
|
||||||
|
|
||||||
|
//Air Temp Dec
|
||||||
|
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, (15 - 10), 1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
|
||||||
|
_lineTempDec = (_rangeToHit - (_lastTestResult select 0)) / 10;
|
||||||
|
|
||||||
|
//Air Temp Inc
|
||||||
|
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, (15 + 10), 1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
|
||||||
|
_lineTempInc = (_rangeToHit - (_lastTestResult select 0)) / 10;
|
||||||
|
|
||||||
|
//Air Density Dec
|
||||||
|
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 0.9, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
|
||||||
|
_lineAirDensDec = (_rangeToHit - (_lastTestResult select 0)) / 10;
|
||||||
|
|
||||||
|
//Air Density Inc
|
||||||
|
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1.1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
|
||||||
|
_lineAirDensInc = (_rangeToHit - (_lastTestResult select 0)) / 10;
|
||||||
|
|
||||||
|
// systemChat format ["debug: Range %1 - in %2 sec", _rangeToHit, (diag_tickTime - _startTime)];
|
||||||
|
|
||||||
|
[_rangeToHit, _lineElevation, _lineHeightElevation, _lineHeightTimeDelta, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc]
|
55
addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf
Normal file
55
addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* DEV to find a firing solution for a given range
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Range to Hit (Meters)<NUMBER>
|
||||||
|
* 1: Height To Hit (Meters)<NUMBER>
|
||||||
|
* 2: Muzzle Velocity (M/S)<NUMBER>
|
||||||
|
* 3: Air Friction <NUMBER>
|
||||||
|
* 4: Time Step (seconds) (eg 1/50 will simulate 50 cycles per second) <NUMBER>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* ARRAY - [NUMBER - Elevation In Degrees, NUMBER - Shot Durration]
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [_rangeToHit, _heightToHit, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(simulateFindSolution);
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_rangeToHit", "_heightToHit", "_muzzleVelocity", "_airFriction", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts"];
|
||||||
|
|
||||||
|
#define MAX_ATTEMPTS 22
|
||||||
|
|
||||||
|
_rangeToHit = _this select 0;
|
||||||
|
_heightToHit = _this select 1;
|
||||||
|
_muzzleVelocity = _this select 2;
|
||||||
|
_airFriction = _this select 3;
|
||||||
|
_timeStep = _this select 4;
|
||||||
|
|
||||||
|
_maxElev = 90;
|
||||||
|
_minElev = 45; //todo - Low Angle Howitzers???
|
||||||
|
|
||||||
|
_error = 10000;
|
||||||
|
_solutionElevation = -1;
|
||||||
|
_lastTestResult = [];
|
||||||
|
_numberOfAttempts = 0;
|
||||||
|
|
||||||
|
//(binary search)
|
||||||
|
while {(_numberOfAttempts < MAX_ATTEMPTS) && {(abs _error) > 0.2}} do {
|
||||||
|
_numberOfAttempts = _numberOfAttempts + 1;
|
||||||
|
_solutionElevation = (_maxElev + _minElev) / 2;
|
||||||
|
_lastTestResult = [_solutionElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 0, _heightToHit, _timeStep] call FUNC(dev_simulateShot);
|
||||||
|
_error = _rangeToHit - (_lastTestResult select 0);
|
||||||
|
if (_error > 0) then {
|
||||||
|
_maxElev = _solutionElevation; //test range was short
|
||||||
|
} else {
|
||||||
|
_minElev = _solutionElevation; //test range was long
|
||||||
|
};
|
||||||
|
};
|
||||||
|
if (_numberOfAttempts >= MAX_ATTEMPTS) exitWith {[]};
|
||||||
|
|
||||||
|
//return the elevation and time required
|
||||||
|
[_solutionElevation, (_lastTestResult select 1)]
|
73
addons/mk6mortar/functions/fnc_dev_simulateShot.sqf
Normal file
73
addons/mk6mortar/functions/fnc_dev_simulateShot.sqf
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay)
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Shot Angle (degrees) <NUMBER>
|
||||||
|
* 1: Muzzle Velocity (m/s) <NUMBER>
|
||||||
|
* 2: Air Friction <NUMBER>
|
||||||
|
* 3: Tempeture (degres celcius) <NUMBER>
|
||||||
|
* 4: Relative Air Denisty <NUMBER>
|
||||||
|
* 5: Tail Wind (m/s) <NUMBER>
|
||||||
|
* 6: Cross Wind (m/s) <NUMBER>
|
||||||
|
* 7: Height Of Target (M) <NUMBER>
|
||||||
|
* 8: Time Step (fraction of a second) <NUMBER>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* <ARRAY> [Distance Traveled<NUMBER>, Shot Time<NUMBER>, Offset (degrees)<NUMBER>]
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [45, 180, -0.0001, 15, 1, 10, 0, 0, 1/50] call ace_mk6mortar_fnc_dev_simulateShot;
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_angleDeg", "_muzzleVelocity", "_airFriction", "_temp", "_relDensity", "_tailWind", "_crosswind", "_heightOfTarget", "_timeStep", "_wind", "_gravity", "_currentPos", "_currentVelocity", "_currentTime", "_lastPos", "_kCoefficent", "_aparentWind", "_changeInVelocity", "_linConversion", "_middlePos", "_middlePosOld", "_middleTotalTravelTime", "_offsetDeg"];
|
||||||
|
|
||||||
|
_angleDeg = _this select 0;
|
||||||
|
_muzzleVelocity = _this select 1;
|
||||||
|
_airFriction = _this select 2;
|
||||||
|
_temp = _this select 3;
|
||||||
|
_relDensity = _this select 4;
|
||||||
|
_tailWind = _this select 5;
|
||||||
|
_crosswind = _this select 6;
|
||||||
|
_heightOfTarget = _this select 7;
|
||||||
|
_timeStep = _this select 8;
|
||||||
|
|
||||||
|
_wind = [_crosswind, _tailWind, 0];
|
||||||
|
_gravity = [0,0,-9.8];
|
||||||
|
|
||||||
|
_currentPos = [0,0,0];
|
||||||
|
_muzzleVelocity = _muzzleVelocity * (((_temp + 273.13) / 288.13 - 1) / 40 + 1);
|
||||||
|
_currentVelocity = [0, (_muzzleVelocity * cos _angleDeg), (_muzzleVelocity * sin _angleDeg)];
|
||||||
|
|
||||||
|
_currentTime = 0;
|
||||||
|
_lastPos = _currentPos;
|
||||||
|
|
||||||
|
_kCoefficent = -1 * _relDensity * _airFriction; //save time in the loop and compute once
|
||||||
|
|
||||||
|
while {((_currentVelocity select 2) > 0) || ((_currentPos select 2) >= _heightOfTarget)} do {
|
||||||
|
_lastPos = _currentPos;
|
||||||
|
|
||||||
|
_aparentWind = _wind vectorDiff _currentVelocity;
|
||||||
|
_changeInVelocity = _gravity vectorAdd (_aparentWind vectorMultiply ((vectorMagnitude _aparentWind) * _kCoefficent));
|
||||||
|
|
||||||
|
_currentVelocity = _currentVelocity vectorAdd (_changeInVelocity vectorMultiply _timeStep);
|
||||||
|
|
||||||
|
_currentPos = _currentPos vectorAdd (_currentVelocity vectorMultiply _timeStep);
|
||||||
|
_currentTime = _currentTime + _timeStep;
|
||||||
|
};
|
||||||
|
|
||||||
|
//Uses linearConversion to get a weighted average betwen points before and after dropping below target height
|
||||||
|
_linConversion = linearConversion [(_lastPos select 2), (_currentPos select 2), _heightOfTarget, 0, 1, true];
|
||||||
|
_middlePos = (_lastPos vectorMultiply (1 - _linConversion)) vectorAdd (_currentPos vectorMultiply (_linConversion));
|
||||||
|
// _middlePosOld = (_lastPos vectorAdd _currentPos) vectorMultiply 0.5;
|
||||||
|
|
||||||
|
//Same to find travel time
|
||||||
|
_middleTotalTravelTime = _currentTime - (_timeStep * (1-_linConversion));
|
||||||
|
|
||||||
|
//Find shot offset (from crosswind), in degrees
|
||||||
|
_offsetDeg = (_middlePos select 0) aTan2 (_middlePos select 1);
|
||||||
|
|
||||||
|
[(_middlePos select 1), _middleTotalTravelTime, _offsetDeg]
|
89
addons/mk6mortar/functions/fnc_handleFired.sqf
Normal file
89
addons/mk6mortar/functions/fnc_handleFired.sqf
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Called when the mortar is fired.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: mortar - Object the event handler is assigned to <OBJECT>
|
||||||
|
* 1: weapon - Fired weapon <STRING>
|
||||||
|
* 2: muzzle - Muzzle that was used <STRING>
|
||||||
|
* 3: mode - Current mode of the fired weapon <STRING>
|
||||||
|
* 4: ammo - Ammo used <STRING>
|
||||||
|
* 5: magazine - magazine name which was used <STRING>
|
||||||
|
* 6: projectile - Object of the projectile that was shot <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Nothing
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [clientFiredBIS-XEH] call ace_mk6mortar_fnc_handleFired
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_shooterMan", "_bisAirFriction", "_temperature", "_newMuzzleVelocityCoefficent", "_bulletVelocity", "_bulletSpeed", "_muzzleVelocity", "_muzzleVelocityShift"];
|
||||||
|
|
||||||
|
disableSerialization;
|
||||||
|
|
||||||
|
PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
|
||||||
|
|
||||||
|
if (!GVAR(airResistanceEnabled)) exitWith {};
|
||||||
|
// Large enough distance to not simulate any wind deflection
|
||||||
|
if (_vehicle distance ACE_player > 8000) exitWith {false};
|
||||||
|
|
||||||
|
//AI will have no clue how to use:
|
||||||
|
_shooterMan = gunner _vehicle;
|
||||||
|
if (!([_shooterMan] call EFUNC(common,isPlayer))) exitWith {false};
|
||||||
|
|
||||||
|
//Should be zero, just make sure:
|
||||||
|
_bisAirFriction = getNumber (configFile >> "CfgAmmo" >> _ammo >> "airFriction");
|
||||||
|
if (_bisAirFriction != 0) exitWith {ERROR("Non zero base airFriction");};
|
||||||
|
|
||||||
|
|
||||||
|
//Calculate air density:
|
||||||
|
_altitude = (getPosASL _vehicle) select 2;
|
||||||
|
#define GET_TEMPERATURE_AT_HEIGHT(h) (EGVAR(weather,currentTemperature) - 0.0065 * (h))
|
||||||
|
_temperature = GET_TEMPERATURE_AT_HEIGHT(_altitude);
|
||||||
|
_pressure = _altitude call EFUNC(weather,calculateBarometricPressure);
|
||||||
|
_relativeHumidity = EGVAR(weather,currentHumidity);
|
||||||
|
_airDensity = [_temperature, _pressure, _relativeHumidity] call EFUNC(weather,calculateAirDensity);
|
||||||
|
_relativeDensity = _airDensity / 1.225;
|
||||||
|
|
||||||
|
TRACE_5("FiredWeather",_temperature,_pressure,_relativeHumidity,_airDensity,_relativeDensity);
|
||||||
|
|
||||||
|
//powder effects:
|
||||||
|
_newMuzzleVelocityCoefficent = (((_temperature + 273.13) / 288.13 - 1) / 40 + 1);
|
||||||
|
if (_newMuzzleVelocityCoefficent != 1) then {
|
||||||
|
_bulletVelocity = velocity _projectile;
|
||||||
|
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||||
|
_bulletVelocity = (vectorNormalized _bulletVelocity) vectorMultiply (_bulletSpeed * _newMuzzleVelocityCoefficent);
|
||||||
|
_projectile setVelocity _bulletVelocity;
|
||||||
|
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
[{
|
||||||
|
private ["_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_dragRef", "_accelRef", "_drag", "_accel"];
|
||||||
|
PARAMS_2(_args,_pfID);
|
||||||
|
EXPLODE_4_PVT(_args,_shell,_airFriction,_time,_relativeDensity);
|
||||||
|
|
||||||
|
if (isNull _shell || {!alive _shell}) exitwith {
|
||||||
|
[_pfID] call cba_fnc_removePerFrameHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
_deltaT = time - _time;
|
||||||
|
_args set[2, time];
|
||||||
|
|
||||||
|
_bulletVelocity = velocity _shell;
|
||||||
|
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||||
|
|
||||||
|
_trueVelocity = _bulletVelocity vectorDiff ACE_wind;
|
||||||
|
_trueSpeed = vectorMagnitude _trueVelocity;
|
||||||
|
|
||||||
|
_drag = _deltaT * _airFriction * _trueSpeed * _relativeDensity;
|
||||||
|
_accel = _trueVelocity vectorMultiply (_drag);
|
||||||
|
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
||||||
|
|
||||||
|
_shell setVelocity _bulletVelocity;
|
||||||
|
|
||||||
|
}, 0, [_projectile, MK6_82mm_AIR_FRICTION, time, _relativeDensity]] call CBA_fnc_addPerFrameHandler;
|
108
addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf
Normal file
108
addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Handles player getting into new vehicle. Loads PFEG for mortar display if it is a mortar.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0:Player <OBJECT>
|
||||||
|
* 1: New Vehicle <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* No
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [bob, mortar] call ace_mk6mortar_fnc_handlePlayerVehicleChanged;
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_chargeText", "_xPos", "_yPos", "_wPos", "_hPos", "_tubeWeaponName", "_fireModes"];
|
||||||
|
|
||||||
|
PARAMS_2(_player,_newVehicle);
|
||||||
|
|
||||||
|
if (isNull _newVehicle) exitWith {};
|
||||||
|
if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {};
|
||||||
|
|
||||||
|
_chargeText = (findDisplay 46) ctrlCreate ["RscStructuredText", 80085];
|
||||||
|
|
||||||
|
_xPos = (profilenamespace getvariable ["IGUI_GRID_WEAPON_X", ((safezoneX + safezoneW) - (12.4 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * (((safezoneW / safezoneH) min 1.2) / 40))]);
|
||||||
|
_yPos = 2.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable ["IGUI_GRID_WEAPON_Y", (safezoneY + 0.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))]);
|
||||||
|
_wPos = 10 * (((safezoneW / safezoneH) min 1.2) / 40);
|
||||||
|
_hPos = 1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25);
|
||||||
|
|
||||||
|
_chargeText ctrlSetPosition [_xPos, _yPos, _wPos, _hPos];
|
||||||
|
_chargeText ctrlCommit 0;
|
||||||
|
|
||||||
|
_tubeWeaponName = (weapons _newVehicle) select 0;
|
||||||
|
_fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes");
|
||||||
|
|
||||||
|
[{
|
||||||
|
PARAMS_2(_args,_pfID);
|
||||||
|
EXPLODE_3_PVT(_args,_mortarVeh,_chargeText,_fireModes);
|
||||||
|
|
||||||
|
if ((vehicle ACE_player) != _mortarVeh) then {
|
||||||
|
[_pfID] call CBA_fnc_removePerFrameHandler;
|
||||||
|
ctrlDelete _chargeText;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
_useMils = _mortarVeh getVariable [QGVAR(useMils), true];
|
||||||
|
|
||||||
|
//Compute: 'charge' from weaponstate
|
||||||
|
_currentFireMode = (weaponState [_mortarVeh, [0]]) select 2;
|
||||||
|
_currentChargeMode = _fireModes find _currentFireMode;
|
||||||
|
|
||||||
|
_text = format ["<t size='0.8'>%1: %2 <img image='%3'/></t>", (localize "STR_ACE_MK6MORTAR_rangetable_charge"), _currentChargeMode, QUOTE(PATHTOF(UI\ui_charges.paa))];
|
||||||
|
_chargeText ctrlSetStructuredText parseText _text;
|
||||||
|
if (shownArtilleryComputer && {!GVAR(allowComputerRangefinder)}) then {
|
||||||
|
//Don't like this solution, but it works
|
||||||
|
closeDialog 0;
|
||||||
|
[parseText "Computer Disabled"] call EFUNC(common,displayTextStructured);
|
||||||
|
};
|
||||||
|
|
||||||
|
_display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull];
|
||||||
|
if (isNull _display) exitWith {}; //It may be null for the first frame
|
||||||
|
|
||||||
|
//Hud should hidden in 3rd person
|
||||||
|
_notGunnerView = cameraView != "GUNNER";
|
||||||
|
|
||||||
|
//Update CurrentElevation Display:
|
||||||
|
if (_notGunnerView) then {
|
||||||
|
(_display displayCtrl 80175) ctrlSetText "";
|
||||||
|
} else {
|
||||||
|
_elevDeg = parseNumber ctrlText (_display displayCtrl 175);
|
||||||
|
if (_useMils) then {
|
||||||
|
(_display displayCtrl 80175) ctrlSetText str round (_elevDeg * 6400 / 360);
|
||||||
|
} else {
|
||||||
|
(_display displayCtrl 80175) ctrlSetText str _elevDeg;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
//Update ElevationNeeded Display:
|
||||||
|
if (_notGunnerView || (!GVAR(allowComputerRangefinder))) then {
|
||||||
|
(_display displayCtrl 80176) ctrlSetText "";
|
||||||
|
} else {
|
||||||
|
_elevDeg = parseNumber ctrlText (_display displayCtrl 176);
|
||||||
|
if (_elevDeg <= 0) then { //Bad data means "----" out of range
|
||||||
|
(_display displayCtrl 80176) ctrlSetText (ctrlText (_display displayCtrl 176));
|
||||||
|
} else {
|
||||||
|
if (_useMils) then {
|
||||||
|
(_display displayCtrl 80176) ctrlSetText str round (_elevDeg * 6400 / 360);
|
||||||
|
} else {
|
||||||
|
(_display displayCtrl 80176) ctrlSetText str _elevDeg;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
//Update Heading Display:
|
||||||
|
if (_notGunnerView || (!GVAR(allowCompass))) then {
|
||||||
|
(_display displayCtrl 80156) ctrlSetText "";
|
||||||
|
} else {
|
||||||
|
_rotationDegrees = ((getDir _mortarVeh) + (((-180 / PI) * (_mortarVeh animationPhase "mainTurret")) + 360)) % 360;
|
||||||
|
if (_useMils) then {
|
||||||
|
(_display displayCtrl 80156) ctrlSetText str round (_rotationDegrees * 6400 / 360);
|
||||||
|
} else {
|
||||||
|
(_display displayCtrl 80156) ctrlSetText (ctrlText (_display displayCtrl 156));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}, 0, [_newVehicle, _chargeText,_fireModes]] call CBA_fnc_addPerFrameHandler;
|
27
addons/mk6mortar/functions/fnc_moduleInit.sqf
Normal file
27
addons/mk6mortar/functions/fnc_moduleInit.sqf
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Loads settings from the module.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: The Module Logic Object <OBJECT>
|
||||||
|
* 1: synced objects <ARRAY>
|
||||||
|
* 2: Activated <BOOL>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [fromModule] call ace_mk6mortar_fnc_moduleInit
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
PARAMS_3(_logic,_syncedUnits,_activated);
|
||||||
|
|
||||||
|
if (!_activated) exitWith {WARNING("Module - placed but not active");};
|
||||||
|
if (!isServer) exitWith {};
|
||||||
|
|
||||||
|
[_logic, QGVAR(airResistanceEnabled), "airResistanceEnabled"] call EFUNC(common,readSettingFromModule);
|
||||||
|
[_logic, QGVAR(allowComputerRangefinder), "allowComputerRangefinder"] call EFUNC(common,readSettingFromModule);
|
||||||
|
[_logic, QGVAR(allowCompass), "allowCompass"] call EFUNC(common,readSettingFromModule);
|
21
addons/mk6mortar/functions/fnc_rangeTableCanUse.sqf
Normal file
21
addons/mk6mortar/functions/fnc_rangeTableCanUse.sqf
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Can player open 82mm rangetable.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Vehicle <OBJECT>
|
||||||
|
* 1: Player <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Can Open <BOOL>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [bob, bob] call ace_mk6mortar_fnc_rangeTableCanUse
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
PARAMS_2(_vehicle,_player);
|
||||||
|
|
||||||
|
"ACE_RangeTable_82mm" in (items _player);
|
48
addons/mk6mortar/functions/fnc_rangeTableOpen.sqf
Normal file
48
addons/mk6mortar/functions/fnc_rangeTableOpen.sqf
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Opens the rangetable and fills the charge listbox.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* No
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* No
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [] call ace_mk6mortar_fnc_rangeTableOpen
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501)
|
||||||
|
|
||||||
|
private ["_weaponName", "_magazines", "_initSpeed", "_fireModes", "_muzzleVelocities", "_showToPlayer", "_artilleryCharge"];
|
||||||
|
|
||||||
|
_weaponName = "mortar_82mm"; //todo: work on other weapons
|
||||||
|
|
||||||
|
createDialog "ACE_82mm_RangeTable_Dialog";
|
||||||
|
if (isNull (uiNamespace getVariable ["ACE_82mm_RangeTable_Dialog", displayNull])) exitWith {ERROR("Dialog failed to open");};
|
||||||
|
|
||||||
|
//Get Magazine Types
|
||||||
|
_magazines = getArray (configFile >> "CfgWeapons" >> _weaponName >> "magazines");
|
||||||
|
|
||||||
|
//For now just get settings from first mag, all rounds have same flight characteristics:
|
||||||
|
if ((count _magazines) < 1) exitWith {ERROR("No Magazines for weapon");};
|
||||||
|
_initSpeed = getNumber (configFile >> "CfgMagazines" >> (_magazines select 0) >> "initSpeed");
|
||||||
|
|
||||||
|
//Get Charge Modes
|
||||||
|
_fireModes = getArray (configFile >> "CfgWeapons" >> _weaponName >> "modes");
|
||||||
|
|
||||||
|
_muzzleVelocities = [];
|
||||||
|
{
|
||||||
|
_showToPlayer = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "showToPlayer");
|
||||||
|
if (_showToPlayer == 1) then {
|
||||||
|
_artilleryCharge = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "artilleryCharge");
|
||||||
|
LIST_CHARGE lbAdd format ["%1: %2", (localize "STR_ACE_MK6MORTAR_rangetable_charge"), (count _muzzleVelocities)];
|
||||||
|
LIST_CHARGE lbSetData [(count _muzzleVelocities), str (_artilleryCharge * _initSpeed)];
|
||||||
|
_muzzleVelocities pushBack _artilleryCharge;
|
||||||
|
};
|
||||||
|
} forEach _fireModes;
|
||||||
|
|
||||||
|
LIST_CHARGE lbSetCurSel 0;
|
37
addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf
Normal file
37
addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Called when listbox selection changes. Updates the rangetable with new values.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* No
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* No
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [] call ace_mk6mortar_fnc_rangeTablePageChange
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
#define RANGE_TABLE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 20001)
|
||||||
|
#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501)
|
||||||
|
|
||||||
|
private ["_listBoxData", "_muzzleVelocity", "_airFriction", "_precalcArray"];
|
||||||
|
|
||||||
|
_listBoxData = LIST_CHARGE lbData (lbCurSel LIST_CHARGE);
|
||||||
|
if (isNil "_listBoxData" || {_listBoxData == ""}) exitWith {ERROR("lbCurSel out of bounds or no data");};
|
||||||
|
_muzzleVelocity = parseNumber _listBoxData;
|
||||||
|
|
||||||
|
_airFriction = if (GVAR(airResistanceEnabled)) then {MK6_82mm_AIR_FRICTION} else {0};
|
||||||
|
|
||||||
|
_precalcArray = [_muzzleVelocity, _airFriction] call FUNC(rangeTablePreCalculatedValues);
|
||||||
|
|
||||||
|
lnbClear RANGE_TABLE;
|
||||||
|
{
|
||||||
|
RANGE_TABLE lnbAddRow _x;
|
||||||
|
} forEach _precalcArray;
|
||||||
|
|
||||||
|
//put dummy line at end because scrolling is fucked and can't see last line
|
||||||
|
RANGE_TABLE lnbAddRow ["", "", "", "", "", "", "", "", "", "", ""];
|
271
addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf
Normal file
271
addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Simple Lookup Table for various muzzle velocities and air frictions.
|
||||||
|
* Use ace_mk6mortar_fnc_dev_buildTable to build
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Muzzle Velocity <NUMBER>
|
||||||
|
* 1: Air Friction <NUMBER>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* <ARRAY>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [200, 0] call ace_mk6mortar_fnc_rangeTablePreCalculatedValues
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
PARAMS_2(_muzzleVelocity,_airFriction);
|
||||||
|
|
||||||
|
switch (true) do {
|
||||||
|
|
||||||
|
case ((abs(_muzzleVelocity - 70) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): {
|
||||||
|
[
|
||||||
|
["100","1493","9","1.4","14.0","3.7","0.4","-0.3","0.0","-0.0","-0.0","0.0"],
|
||||||
|
["150","1438","14","1.4","13.9","2.5","0.4","-0.4","0.0","-0.0","-0.1","0.0"],
|
||||||
|
["200","1381","20","1.4","13.8","1.9","0.5","-0.4","0.0","-0.0","-0.1","0.1"],
|
||||||
|
["250","1321","27","1.5","13.6","1.5","0.5","-0.4","0.0","-0.0","-0.1","0.1"],
|
||||||
|
["300","1256","36","1.6","13.3","1.3","0.6","-0.5","0.0","-0.1","-0.1","0.1"],
|
||||||
|
["350","1183","49","1.7","12.9","1.1","0.6","-0.5","0.1","-0.1","-0.1","0.1"],
|
||||||
|
["400","1097","70","1.9","12.4","0.9","0.6","-0.5","0.1","-0.1","-0.2","0.1"],
|
||||||
|
["450","979","113","2.3","11.6","0.8","0.6","-0.5","0.1","-0.1","-0.2","0.2"]
|
||||||
|
]
|
||||||
|
};
|
||||||
|
case ((abs(_muzzleVelocity - 140) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): {
|
||||||
|
[
|
||||||
|
["150","1556","1","0.8","27.2","16.3","2.5","-2.4","0.0","-0.0","-0.2","0.2"],
|
||||||
|
["200","1541","1","0.8","27.2","12.3","2.5","-2.4","0.0","-0.0","-0.3","0.2"],
|
||||||
|
["250","1527","2","0.8","27.2","9.9","2.6","-2.4","0.0","-0.0","-0.3","0.3"],
|
||||||
|
["300","1512","2","0.8","27.2","8.3","2.7","-2.4","0.1","-0.0","-0.4","0.4"],
|
||||||
|
["350","1497","3","0.8","27.1","7.1","2.7","-2.5","0.0","-0.1","-0.5","0.4"],
|
||||||
|
["400","1482","3","0.8","27.1","6.2","2.7","-2.5","0.1","-0.1","-0.5","0.5"],
|
||||||
|
["450","1467","3","0.8","27.0","5.6","2.8","-2.5","0.1","-0.1","-0.6","0.6"],
|
||||||
|
["500","1451","4","0.8","27.0","5.0","2.9","-2.6","0.1","-0.1","-0.6","0.6"],
|
||||||
|
["550","1436","4","0.8","26.9","4.6","2.9","-2.6","0.1","-0.1","-0.7","0.7"],
|
||||||
|
["600","1420","5","0.8","26.8","4.2","3.0","-2.7","0.1","-0.1","-0.8","0.8"],
|
||||||
|
["650","1404","5","0.8","26.8","3.9","3.0","-2.7","0.1","-0.1","-0.9","0.8"],
|
||||||
|
["700","1388","6","0.8","26.7","3.6","3.1","-2.8","0.1","-0.1","-0.9","0.9"],
|
||||||
|
["750","1372","6","0.8","26.6","3.4","3.2","-2.8","0.1","-0.1","-1.0","1.0"],
|
||||||
|
["800","1355","7","0.8","26.5","3.2","3.2","-2.9","0.1","-0.1","-1.1","1.1"],
|
||||||
|
["850","1338","8","0.8","26.4","3.0","3.3","-2.9","0.1","-0.1","-1.1","1.1"],
|
||||||
|
["900","1321","8","0.8","26.2","2.8","3.4","-3.0","0.1","-0.1","-1.2","1.2"],
|
||||||
|
["950","1303","9","0.9","26.1","2.7","3.4","-3.1","0.1","-0.2","-1.3","1.2"],
|
||||||
|
["1000","1285","10","0.9","26.0","2.6","3.5","-3.1","0.2","-0.1","-1.4","1.3"],
|
||||||
|
["1050","1266","11","0.9","25.8","2.4","3.5","-3.2","0.1","-0.2","-1.4","1.4"],
|
||||||
|
["1100","1247","12","0.9","25.7","2.3","3.6","-3.3","0.1","-0.2","-1.5","1.4"],
|
||||||
|
["1150","1228","13","0.9","25.5","2.2","3.7","-3.3","0.2","-0.2","-1.6","1.5"],
|
||||||
|
["1200","1207","14","1.0","25.3","2.1","3.7","-3.4","0.2","-0.2","-1.7","1.6"],
|
||||||
|
["1250","1186","15","1.0","25.1","2.0","3.8","-3.4","0.2","-0.2","-1.7","1.7"],
|
||||||
|
["1300","1163","17","1.0","24.8","1.9","3.8","-3.5","0.2","-0.2","-1.8","1.7"],
|
||||||
|
["1350","1140","19","1.0","24.6","1.9","3.9","-3.5","0.2","-0.2","-1.9","1.8"],
|
||||||
|
["1400","1115","21","1.1","24.3","1.8","3.9","-3.6","0.2","-0.2","-1.9","1.9"],
|
||||||
|
["1450","1088","24","1.1","23.9","1.7","4.0","-3.6","0.2","-0.2","-2.0","1.9"],
|
||||||
|
["1500","1060","27","1.2","23.6","1.6","4.0","-3.7","0.2","-0.2","-2.1","2.0"],
|
||||||
|
["1550","1028","32","1.3","23.1","1.5","4.0","-3.7","0.2","-0.2","-2.1","2.1"],
|
||||||
|
["1600","991","38","1.4","22.6","1.5","4.0","-3.7","0.2","-0.2","-2.2","2.1"],
|
||||||
|
["1650","947","49","1.7","21.9","1.4","4.0","-3.7","0.2","-0.3","-2.3","2.2"],
|
||||||
|
["1700","888","71","2.1","21.0","1.3","3.9","-3.6","0.3","-0.3","-2.3","2.2"]
|
||||||
|
]
|
||||||
|
};
|
||||||
|
case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): {
|
||||||
|
[
|
||||||
|
["250","1559","1","0.6","37.3","23.8","6.1","-5.9","0.0","-0.0","-0.6","0.5"],
|
||||||
|
["300","1551","1","0.6","37.3","20.0","6.1","-5.9","0.1","-0.0","-0.7","0.7"],
|
||||||
|
["350","1543","1","0.6","37.3","17.2","6.2","-5.9","0.0","-0.1","-0.8","0.7"],
|
||||||
|
["400","1535","1","0.6","37.3","15.1","6.2","-5.9","0.1","-0.0","-0.9","0.9"],
|
||||||
|
["450","1527","1","0.6","37.3","13.4","6.3","-6.0","0.1","-0.1","-1.0","1.0"],
|
||||||
|
["500","1519","1","0.6","37.2","12.1","6.3","-6.0","0.1","-0.1","-1.1","1.1"],
|
||||||
|
["550","1510","1","0.6","37.2","11.0","6.4","-6.0","0.1","-0.1","-1.3","1.2"],
|
||||||
|
["600","1502","1","0.6","37.2","10.1","6.4","-6.1","0.1","-0.1","-1.4","1.3"],
|
||||||
|
["650","1494","1","0.6","37.2","9.4","6.5","-6.1","0.1","-0.1","-1.5","1.4"],
|
||||||
|
["700","1485","2","0.6","37.1","8.7","6.5","-6.2","0.1","-0.1","-1.6","1.5"],
|
||||||
|
["750","1477","2","0.6","37.1","8.2","6.6","-6.2","0.1","-0.1","-1.7","1.6"],
|
||||||
|
["800","1468","2","0.6","37.0","7.7","6.7","-6.3","0.1","-0.1","-1.8","1.8"],
|
||||||
|
["850","1460","2","0.6","37.0","7.2","6.7","-6.3","0.1","-0.1","-2.0","1.9"],
|
||||||
|
["900","1451","2","0.6","37.0","6.8","6.8","-6.4","0.1","-0.1","-2.1","2.0"],
|
||||||
|
["950","1443","2","0.6","36.9","6.5","6.9","-6.4","0.1","-0.1","-2.2","2.1"],
|
||||||
|
["1000","1434","2","0.6","36.9","6.2","6.9","-6.5","0.1","-0.1","-2.3","2.2"],
|
||||||
|
["1050","1425","2","0.6","36.8","5.9","7.0","-6.6","0.1","-0.2","-2.5","2.3"],
|
||||||
|
["1100","1417","3","0.6","36.8","5.6","7.1","-6.6","0.1","-0.2","-2.6","2.4"],
|
||||||
|
["1150","1408","3","0.6","36.7","5.4","7.1","-6.7","0.2","-0.2","-2.7","2.5"],
|
||||||
|
["1200","1399","3","0.6","36.6","5.2","7.2","-6.7","0.2","-0.2","-2.8","2.7"],
|
||||||
|
["1250","1390","3","0.6","36.6","5.0","7.3","-6.8","0.2","-0.2","-2.9","2.8"],
|
||||||
|
["1300","1381","3","0.6","36.5","4.8","7.4","-6.9","0.2","-0.2","-3.0","2.9"],
|
||||||
|
["1350","1372","3","0.6","36.4","4.6","7.4","-6.9","0.2","-0.2","-3.2","3.0"],
|
||||||
|
["1400","1362","4","0.6","36.4","4.4","7.5","-7.0","0.2","-0.2","-3.3","3.1"],
|
||||||
|
["1450","1353","4","0.6","36.3","4.3","7.6","-7.1","0.2","-0.2","-3.4","3.2"],
|
||||||
|
["1500","1344","4","0.6","36.2","4.2","7.7","-7.1","0.2","-0.2","-3.5","3.4"],
|
||||||
|
["1550","1334","4","0.6","36.1","4.0","7.7","-7.2","0.2","-0.2","-3.7","3.5"],
|
||||||
|
["1600","1324","4","0.6","36.0","3.9","7.8","-7.3","0.2","-0.2","-3.8","3.6"],
|
||||||
|
["1650","1314","4","0.7","35.9","3.8","7.9","-7.3","0.2","-0.2","-3.9","3.7"],
|
||||||
|
["1700","1304","5","0.7","35.8","3.7","7.9","-7.4","0.2","-0.2","-4.0","3.8"],
|
||||||
|
["1750","1294","5","0.7","35.7","3.6","8.0","-7.5","0.2","-0.2","-4.2","3.9"],
|
||||||
|
["1800","1284","5","0.7","35.6","3.5","8.1","-7.6","0.2","-0.3","-4.3","4.0"],
|
||||||
|
["1850","1274","5","0.7","35.5","3.4","8.2","-7.6","0.2","-0.3","-4.4","4.2"],
|
||||||
|
["1900","1263","6","0.7","35.4","3.3","8.2","-7.7","0.2","-0.3","-4.5","4.3"],
|
||||||
|
["1950","1253","6","0.7","35.2","3.2","8.3","-7.8","0.2","-0.3","-4.7","4.4"],
|
||||||
|
["2000","1242","6","0.7","35.1","3.1","8.4","-7.8","0.3","-0.3","-4.8","4.5"],
|
||||||
|
["2050","1231","7","0.7","35.0","3.0","8.4","-7.9","0.3","-0.3","-4.9","4.7"],
|
||||||
|
["2100","1219","7","0.7","34.8","2.9","8.5","-8.0","0.3","-0.3","-5.0","4.8"],
|
||||||
|
["2150","1208","7","0.7","34.7","2.9","8.5","-8.0","0.3","-0.3","-5.2","4.9"],
|
||||||
|
["2200","1196","8","0.7","34.5","2.8","8.6","-8.1","0.3","-0.3","-5.3","5.0"],
|
||||||
|
["2250","1184","8","0.7","34.3","2.7","8.7","-8.2","0.3","-0.3","-5.4","5.1"],
|
||||||
|
["2300","1171","9","0.8","34.2","2.7","8.7","-8.2","0.3","-0.3","-5.5","5.2"],
|
||||||
|
["2350","1158","9","0.8","34.0","2.6","8.8","-8.3","0.3","-0.3","-5.7","5.4"],
|
||||||
|
["2400","1145","10","0.8","33.8","2.5","8.8","-8.3","0.3","-0.3","-5.8","5.5"],
|
||||||
|
["2450","1132","10","0.8","33.6","2.5","8.9","-8.4","0.3","-0.3","-5.9","5.6"],
|
||||||
|
["2500","1118","11","0.8","33.3","2.4","8.9","-8.4","0.3","-0.3","-6.0","5.7"],
|
||||||
|
["2550","1103","12","0.8","33.1","2.4","9.0","-8.5","0.3","-0.3","-6.1","5.8"],
|
||||||
|
["2600","1088","13","0.9","32.8","2.3","9.0","-8.5","0.4","-0.3","-6.2","5.9"],
|
||||||
|
["2650","1072","14","0.9","32.6","2.2","9.0","-8.6","0.4","-0.4","-6.4","6.0"],
|
||||||
|
["2700","1056","15","0.9","32.3","2.2","9.0","-8.6","0.3","-0.4","-6.5","6.1"],
|
||||||
|
["2750","1038","16","1.0","31.9","2.1","9.1","-8.6","0.4","-0.4","-6.6","6.3"],
|
||||||
|
["2800","1020","18","1.0","31.6","2.1","9.1","-8.6","0.4","-0.4","-6.7","6.4"],
|
||||||
|
["2850","1000","20","1.1","31.2","2.0","9.1","-8.6","0.4","-0.4","-6.8","6.5"],
|
||||||
|
["2900","978","22","1.1","30.8","1.9","9.0","-8.6","0.4","-0.4","-6.9","6.5"],
|
||||||
|
["2950","954","26","1.2","30.3","1.9","9.0","-8.6","0.4","-0.4","-7.0","6.6"],
|
||||||
|
["3000","927","31","1.4","29.7","1.8","8.9","-8.5","0.4","-0.4","-7.1","6.7"],
|
||||||
|
["3050","894","38","1.6","29.0","1.7","8.8","-8.4","0.4","-0.4","-7.2","6.8"],
|
||||||
|
["3100","849","54","2.0","27.9","1.6","8.5","-8.3","0.4","-0.4","-7.2","6.8"]
|
||||||
|
]
|
||||||
|
};
|
||||||
|
case ((abs(_muzzleVelocity - 70) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): {
|
||||||
|
[
|
||||||
|
["100","1497","9","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["150","1445","14","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["200","1390","19","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["250","1333","26","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["300","1272","34","1.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["350","1204","45","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["400","1127","61","1.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["450","1028","91","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"]
|
||||||
|
]
|
||||||
|
};
|
||||||
|
case ((abs(_muzzleVelocity - 140) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): {
|
||||||
|
[
|
||||||
|
["150","1562","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["200","1549","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["250","1536","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["300","1523","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["350","1510","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["400","1497","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["450","1484","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["500","1471","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["550","1458","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["600","1445","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["650","1431","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["700","1418","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["750","1404","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["800","1390","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["850","1376","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["900","1362","6","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["950","1348","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1000","1333","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1050","1318","8","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1100","1303","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1150","1288","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1200","1272","10","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1250","1256","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1300","1239","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1350","1222","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1400","1205","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1450","1187","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1500","1168","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1550","1148","18","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1600","1127","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1650","1105","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1700","1082","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1750","1057","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1800","1029","31","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1850","997","37","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1900","960","46","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1950","912","63","1.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"]
|
||||||
|
]
|
||||||
|
};
|
||||||
|
case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): {
|
||||||
|
[
|
||||||
|
["300","1563","0","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["350","1556","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["400","1550","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["450","1544","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["500","1537","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["550","1531","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["600","1525","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["650","1519","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["700","1512","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["750","1506","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["800","1499","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["850","1493","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["900","1487","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["950","1480","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1000","1474","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1050","1467","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1100","1461","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1150","1454","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1200","1448","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1250","1441","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1300","1435","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1350","1428","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1400","1422","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1450","1415","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1500","1408","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1550","1402","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1600","1395","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1650","1388","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["1700","1381","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1750","1374","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1800","1367","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1850","1360","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1900","1353","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["1950","1346","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2000","1339","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2050","1332","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2100","1325","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2150","1317","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2200","1310","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2250","1302","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2300","1295","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2350","1287","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2400","1280","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2450","1272","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2500","1264","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2550","1256","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2600","1248","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2650","1240","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2700","1232","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2750","1223","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2800","1215","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["2850","1206","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2900","1197","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["2950","1188","7","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3000","1179","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["3050","1170","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3100","1160","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["3150","1151","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3200","1141","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["3250","1131","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3300","1120","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3350","1109","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3400","1098","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["3450","1087","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["3500","1075","13","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["3550","1062","14","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["3600","1049","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3650","1036","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["3700","1021","17","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3750","1006","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3800","990","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3850","971","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["3900","952","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["3950","929","32","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
|
||||||
|
["4000","900","40","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
|
||||||
|
["4050","861","56","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"]
|
||||||
|
]
|
||||||
|
};
|
||||||
|
default {
|
||||||
|
ERROR("MuzzleVelocity not found in LUT");
|
||||||
|
[]
|
||||||
|
};
|
||||||
|
};
|
24
addons/mk6mortar/functions/fnc_toggleMils.sqf
Normal file
24
addons/mk6mortar/functions/fnc_toggleMils.sqf
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Toggles the mortart to show mils or degrees
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Vehicle <OBJECT>
|
||||||
|
* 1: Player <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* No
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [mortar,bob] call ace_mk6mortar_fnc_toggleMils;
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
PARAMS_2(_mortarVeh,_unit);
|
||||||
|
|
||||||
|
private "_currentSetting";
|
||||||
|
|
||||||
|
_currentSetting = _mortarVeh getVariable [QGVAR(useMils), true];
|
||||||
|
_mortarVeh setVariable [QGVAR(useMils), (!_currentSetting)];
|
67
addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf
Normal file
67
addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* Author: PabstMirror
|
||||||
|
* Called when the mk6's in game UI is loaded. Hides rangefinder data if it is disabled.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [] call ace_mk6mortar_fnc_turretDisplayLoaded
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
#define CTRL_CA_OPTICSPITCH (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSPITCH")
|
||||||
|
#define CTRL_CA_OPTICSZOOM (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSZOOM")
|
||||||
|
#define CTRL_CA_SOLUTION_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_SOLUTION_TEXT")
|
||||||
|
#define CTRL_CA_DISTANCE_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_DISTANCE_TEXT")
|
||||||
|
#define CTRL_CA_DISTANCE (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_DISTANCE")
|
||||||
|
#define CTRL_CA_TIME_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_TIME_TEXT")
|
||||||
|
#define CTRL_CA_TIME (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_TIME")
|
||||||
|
#define CTRL_CA_ELEV_NEED_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED_TEXT")
|
||||||
|
#define CTRL_CA_RANGEELEMENTS_GROUP (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_RangeElements_group")
|
||||||
|
|
||||||
|
#define CTRL_CA_HEADING (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_Heading")
|
||||||
|
#define CTRL_CA_ELEV (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV")
|
||||||
|
#define CTRL_CA_ELEV_NEED (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED")
|
||||||
|
|
||||||
|
private ["_display", "_fnc_hideControl"];
|
||||||
|
|
||||||
|
disableSerialization;
|
||||||
|
|
||||||
|
_display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull];
|
||||||
|
if (isNull _display) exitWith {};
|
||||||
|
|
||||||
|
_fnc_hideControl = {
|
||||||
|
private "_idc";
|
||||||
|
PARAMS_2(_path,_hideCtrl);
|
||||||
|
_idc = getNumber (_path >> "IDC");
|
||||||
|
_pos = [];
|
||||||
|
if (_hideCtrl) then {
|
||||||
|
_pos = [-9,-9,0,0];
|
||||||
|
} else {
|
||||||
|
{
|
||||||
|
if (isNumber (_path >> _x)) then {
|
||||||
|
_pos pushBack (getNumber (_path >> _x));
|
||||||
|
} else {
|
||||||
|
_pos pushBack (call compile (getText (_path >> _x)));
|
||||||
|
};
|
||||||
|
} forEach ["x", "y", "w", "h"];
|
||||||
|
};
|
||||||
|
(_display displayCtrl _idc) ctrlSetPosition _pos;
|
||||||
|
(_display displayCtrl _idc) ctrlCommit 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
{
|
||||||
|
[_x, (!GVAR(allowComputerRangefinder))] call _fnc_hideControl;
|
||||||
|
} forEach [CTRL_CA_OPTICSPITCH, CTRL_CA_OPTICSZOOM, CTRL_CA_SOLUTION_TEXT, CTRL_CA_DISTANCE_TEXT, CTRL_CA_DISTANCE, CTRL_CA_TIME_TEXT, CTRL_CA_TIME, CTRL_CA_ELEV_NEED_TEXT, CTRL_CA_RANGEELEMENTS_GROUP];
|
||||||
|
|
||||||
|
//Always hide these, handled by the mil convertions PFEH in handlePlayerVehChanged
|
||||||
|
[CTRL_CA_HEADING, true] call _fnc_hideControl;
|
||||||
|
[CTRL_CA_ELEV, true] call _fnc_hideControl;
|
||||||
|
[CTRL_CA_ELEV_NEED, true] call _fnc_hideControl;
|
||||||
|
|
1
addons/mk6mortar/functions/script_component.hpp
Normal file
1
addons/mk6mortar/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "\z\ace\addons\mk6mortar\script_component.hpp"
|
14
addons/mk6mortar/script_component.hpp
Normal file
14
addons/mk6mortar/script_component.hpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#define COMPONENT mk6mortar
|
||||||
|
#include "\z\ace\Addons\main\script_mod.hpp"
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED_MK6MORTAR
|
||||||
|
#define DEBUG_MODE_FULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_SETTINGS_MK6MORTAR
|
||||||
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_MK6MORTAR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "\z\ace\Addons\main\script_macros.hpp"
|
||||||
|
|
||||||
|
#define MK6_82mm_AIR_FRICTION -0.0001
|
18
addons/mk6mortar/stringtable.xml
Normal file
18
addons/mk6mortar/stringtable.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Edited with tabler - 2015-04-06 -->
|
||||||
|
<Project name="ACE">
|
||||||
|
<Package name="mk6mortar">
|
||||||
|
<Key ID="STR_ACE_MK6MORTAR_rangetable_name">
|
||||||
|
<English>82mm Rangetable</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MK6MORTAR_rangetable_description">
|
||||||
|
<English>Range Table for the MK6 82mm Mortar</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MK6MORTAR_rangetable_action">
|
||||||
|
<English>Open 82mm Rangetable</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_MK6MORTAR_rangetable_charge">
|
||||||
|
<English>Charge</English>
|
||||||
|
</Key>
|
||||||
|
</Package>
|
||||||
|
</Project>
|
@ -3,6 +3,8 @@
|
|||||||
ADDON = false;
|
ADDON = false;
|
||||||
|
|
||||||
PREP(moduleInit);
|
PREP(moduleInit);
|
||||||
|
PREP(bi_moduleProjectile);
|
||||||
|
|
||||||
GVAR(moduleInitCollection) = [];
|
GVAR(moduleInitCollection) = [];
|
||||||
|
|
||||||
ADDON = true;
|
ADDON = true;
|
||||||
|
@ -23,6 +23,9 @@ class CfgVehicles {
|
|||||||
init = QUOTE(_this call DFUNC(moduleInit));
|
init = QUOTE(_this call DFUNC(moduleInit));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
class ModuleOrdnance_F: Module_F {
|
||||||
|
function = "ace_modules_fnc_bi_moduleProjectile";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "CfgEventHandlers.hpp"
|
#include "CfgEventHandlers.hpp"
|
||||||
|
191
addons/modules/functions/fnc_bi_moduleProjectile.sqf
Normal file
191
addons/modules/functions/fnc_bi_moduleProjectile.sqf
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
/*
|
||||||
|
* Author: Bohemia Interactive
|
||||||
|
* Module function for spawning projectiles
|
||||||
|
* Used by Curator artillery modules etc
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: The logic object <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* nil
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
_fnc_scriptNameParentTemp = if !(isnil '_fnc_scriptName') then {_fnc_scriptName} else {'BIS_fnc_moduleProjectile'};
|
||||||
|
private ['_fnc_scriptNameParent'];
|
||||||
|
_fnc_scriptNameParent = _fnc_scriptNameParentTemp;
|
||||||
|
_fnc_scriptNameParentTemp = nil;
|
||||||
|
|
||||||
|
private ['_fnc_scriptName'];
|
||||||
|
_fnc_scriptName = 'BIS_fnc_moduleProjectile';
|
||||||
|
scriptname _fnc_scriptName;
|
||||||
|
|
||||||
|
private ["_logic", "_units", "_activated"];
|
||||||
|
_logic = _this select 0;
|
||||||
|
_units = _this select 1;
|
||||||
|
_activated = _this select 2;
|
||||||
|
|
||||||
|
if ({local _x} count (objectcurators _logic) > 0) then {
|
||||||
|
//--- Reveal the circle to curators
|
||||||
|
_logic hideobject false;
|
||||||
|
_logic setpos position _logic;
|
||||||
|
};
|
||||||
|
if !(isserver) exitwith {};
|
||||||
|
|
||||||
|
if (_activated) then {
|
||||||
|
_ammo = _logic getvariable ["type",gettext (configfile >> "cfgvehicles" >> typeof _logic >> "ammo")];
|
||||||
|
if (_ammo != "") then {
|
||||||
|
_cfgAmmo = configfile >> "cfgammo" >> _ammo;
|
||||||
|
//if !(isclass _cfgAmmo) exitwith {["CfgAmmo class '%1' not found.",_ammo] call bis_fnc_error;};
|
||||||
|
_dirVar = _fnc_scriptname + typeof _logic;
|
||||||
|
_logic setdir (missionnamespace getvariable [_dirVar,direction _logic]); //--- Restore custom direction
|
||||||
|
_pos = getposatl _logic;
|
||||||
|
_posAmmo = +_pos;
|
||||||
|
_posAmmo set [2,0];
|
||||||
|
_dir = direction _logic;
|
||||||
|
_simulation = tolower gettext (configfile >> "cfgammo" >> _ammo >> "simulation");
|
||||||
|
_altitude = 0;
|
||||||
|
_velocity = [];
|
||||||
|
_attach = false;
|
||||||
|
_radio = "";
|
||||||
|
_delay = 60;
|
||||||
|
_sound = "";
|
||||||
|
_soundSourceClass = "";
|
||||||
|
_hint = [];
|
||||||
|
_shakeStrength = 0;
|
||||||
|
_shakeRadius = 0;
|
||||||
|
switch (_simulation) do {
|
||||||
|
case "shotshell": {
|
||||||
|
_altitude = 1000;
|
||||||
|
_velocity = [0,0,-100];
|
||||||
|
_radio = "SentGenIncoming";
|
||||||
|
_sounds = if (getnumber (_cfgAmmo >> "hit") < 200) then {["mortar1","mortar2"]} else {["shell1","shell2","shell3","shell4"]};
|
||||||
|
_sound = _sounds call bis_fnc_selectrandom;
|
||||||
|
_hint = ["Curator","PlaceOrdnance"];
|
||||||
|
_shakeStrength = 0.01;
|
||||||
|
_shakeRadius = 300;
|
||||||
|
};
|
||||||
|
case "shotsubmunitions": {
|
||||||
|
_posAmmo = [_posAmmo,500,_dir + 180] call bis_fnc_relpos;
|
||||||
|
_altitude = 1000 - ((getterrainheightasl _posAmmo) - (getterrainheightasl _pos));
|
||||||
|
_posAmmo set [2,_altitude];
|
||||||
|
_velocity = [sin _dir * 68,cos _dir * 68,-100];
|
||||||
|
_radio = "SentGenIncoming";
|
||||||
|
_hint = ["Curator","PlaceOrdnance"];
|
||||||
|
_shakeStrength = 0.02;
|
||||||
|
_shakeRadius = 500;
|
||||||
|
};
|
||||||
|
case "shotilluminating": {
|
||||||
|
_altitude = 66;
|
||||||
|
_velocity = [wind select 0,wind select 1,30];
|
||||||
|
_sound = "SN_Flare_Fired_4";
|
||||||
|
_soundSourceClass = "SoundFlareLoop_F";
|
||||||
|
};
|
||||||
|
case "shotnvgmarker";
|
||||||
|
case "shotsmokex": {
|
||||||
|
_altitude = 0;
|
||||||
|
_velocity = [0,0,0];
|
||||||
|
_attach = true;
|
||||||
|
};
|
||||||
|
default {["Ammo simulation '%1' is not supported",_simulation] call bis_fnc_error;};
|
||||||
|
};
|
||||||
|
_fnc_playRadio = {
|
||||||
|
if (_radio != "") then {
|
||||||
|
_entities = (getposatl _logic) nearentities ["All",100];
|
||||||
|
_sides = [];
|
||||||
|
{
|
||||||
|
if (isplayer _x) then {
|
||||||
|
_side = side group _x;
|
||||||
|
if (_side in [east,west,resistance,civilian]) then {
|
||||||
|
//--- Play radio (only if it wasn't played recently)
|
||||||
|
if (time > _x getvariable ["BIS_fnc_moduleProjectile_radio",-_delay]) then {
|
||||||
|
[[_side,_radio,"side"],"bis_fnc_sayMessage",_x] call bis_fnc_mp;
|
||||||
|
_x setvariable ["BIS_fnc_moduleProjectile_radio",time + _delay];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} foreach _entities;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
if (count _hint > 0) then {
|
||||||
|
[[_hint,nil,nil,nil,nil,nil,nil,true],"bis_fnc_advHint",objectcurators _logic] call bis_fnc_mp;
|
||||||
|
};
|
||||||
|
if (count _velocity == 3) then {
|
||||||
|
_altitude = (_logic getvariable ["altitude",_altitude]) call bis_fnc_parsenumber;
|
||||||
|
_radio = _logic getvariable ["radio",_radio];
|
||||||
|
|
||||||
|
//--- Create projectile
|
||||||
|
_posAmmo set [2,_altitude];
|
||||||
|
_projectile = createvehicle [_ammo,_posAmmo,[],0,"none"];
|
||||||
|
_projectile setpos _posAmmo;
|
||||||
|
_projectile setvelocity _velocity;
|
||||||
|
if (_attach) then {_projectile attachto [_logic,[0,0,_altitude]];};
|
||||||
|
|
||||||
|
// This is our addition to this function
|
||||||
|
if (!isnil "ace_frag_fnc_addManualTrack") then {
|
||||||
|
[_projectile] call ace_frag_fnc_addManualTrack
|
||||||
|
};
|
||||||
|
|
||||||
|
//--- Play sound
|
||||||
|
if (_sound != "") then {[[_logic,_sound,"say3D"],"bis_fnc_sayMessage"] call bis_fnc_mp;};
|
||||||
|
|
||||||
|
//--- Create sound source
|
||||||
|
_soundSource = if (_soundSourceClass != "") then {createSoundSource [_soundSourceClass,_pos,[],0]} else {objnull};
|
||||||
|
|
||||||
|
//--- Play radio warning
|
||||||
|
[] call _fnc_playRadio;
|
||||||
|
|
||||||
|
//--- Update
|
||||||
|
if (_attach) then {
|
||||||
|
waituntil {
|
||||||
|
_soundSource setposatl getposatl _projectile;
|
||||||
|
sleep 1;
|
||||||
|
isnull _projectile || isnull _logic
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
waituntil {
|
||||||
|
_soundSource setposatl getposatl _projectile;
|
||||||
|
|
||||||
|
if (getposatl _logic distance _pos > 0 || direction _logic != _dir) then {
|
||||||
|
_posNew = getposasl _logic;
|
||||||
|
_dirDiff = direction _logic - _dir;
|
||||||
|
_posNew = [_posNew,[getposasl _projectile,_pos] call bis_fnc_distance2d,direction _logic + 180] call bis_fnc_relpos;
|
||||||
|
_posNew set [2,getposasl _projectile select 2];
|
||||||
|
_projectile setvelocity ([velocity _projectile,-_dirDiff] call bis_fnc_rotatevector2d);
|
||||||
|
_projectile setposasl _posNew;
|
||||||
|
_pos = getposatl _logic;
|
||||||
|
_dir = direction _logic;
|
||||||
|
missionnamespace setvariable [_dirVar,_dir];
|
||||||
|
};
|
||||||
|
sleep 0.1;
|
||||||
|
isnull _projectile || isnull _logic
|
||||||
|
};
|
||||||
|
};
|
||||||
|
deletevehicle _projectile;
|
||||||
|
deletevehicle _soundSource;
|
||||||
|
if (count objectcurators _logic > 0) then {
|
||||||
|
|
||||||
|
//--- Delete curator spawned logic
|
||||||
|
if (_shakeStrength > 0) then {
|
||||||
|
if (_simulation == "shotsubmunitions") then {sleep 0.5;};
|
||||||
|
[[_shakeStrength,0.7,[position _logic,_shakeRadius]],"bis_fnc_shakeCuratorCamera"] call bis_fnc_mp;
|
||||||
|
};
|
||||||
|
deletevehicle _logic;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//--- Repeat to achieve permanent effect
|
||||||
|
_repeat = _logic getvariable ["repeat",0] > 0;
|
||||||
|
if (_repeat) then {
|
||||||
|
[_logic,_units,_activated] call bis_fnc_moduleprojectile;
|
||||||
|
} else {
|
||||||
|
deletevehicle _logic;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
deletevehicle _logic;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
["Cannot create projectile, 'ammo' config attribute is missing in %1",typeof _logic] call bis_fnc_error;
|
||||||
|
};
|
||||||
|
};
|
@ -519,7 +519,7 @@
|
|||||||
<English>Punisher (GMG)</English>
|
<English>Punisher (GMG)</English>
|
||||||
<German>Punisher (GMW)</German>
|
<German>Punisher (GMW)</German>
|
||||||
<Spanish>Punisher (GMG)</Spanish>
|
<Spanish>Punisher (GMG)</Spanish>
|
||||||
<Polish>Punisher (CKM)</Polish>
|
<Polish>Punisher (GMG)</Polish>
|
||||||
<Czech>Punisher (granátomet)</Czech>
|
<Czech>Punisher (granátomet)</Czech>
|
||||||
<French>Punisher (GMG)</French>
|
<French>Punisher (GMG)</French>
|
||||||
<Russian>Kаратель (Гранатомет)</Russian>
|
<Russian>Kаратель (Гранатомет)</Russian>
|
||||||
@ -1135,7 +1135,7 @@
|
|||||||
<English>Mini-Spike (AT)</English>
|
<English>Mini-Spike (AT)</English>
|
||||||
<German>Mini-Spike (PALR)</German>
|
<German>Mini-Spike (PALR)</German>
|
||||||
<Czech>Mini-Spike (PT)</Czech>
|
<Czech>Mini-Spike (PT)</Czech>
|
||||||
<Polish>Mini-Spike (AA)</Polish>
|
<Polish>Mini-Spike (AT)</Polish>
|
||||||
<French>Mini-Spike (AT)</French>
|
<French>Mini-Spike (AT)</French>
|
||||||
<Hungarian>Mini-Spike (Tankelhárító)</Hungarian>
|
<Hungarian>Mini-Spike (Tankelhárító)</Hungarian>
|
||||||
<Spanish>Mini-Spike (AT)</Spanish>
|
<Spanish>Mini-Spike (AT)</Spanish>
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
class Extended_PreInit_EventHandlers {
|
class Extended_PreInit_EventHandlers {
|
||||||
class ADDON {
|
class ADDON {
|
||||||
clientInit = QUOTE(call COMPILE_FILE(XEH_preClientInit));
|
|
||||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -7,6 +7,22 @@ class CfgWorlds {
|
|||||||
ACE_TempNight[] = {4, 4, 6, 8, 13, 17, 20, 20, 16, 12, 8, 6};
|
ACE_TempNight[] = {4, 4, 6, 8, 13, 17, 20, 20, 16, 12, 8, 6};
|
||||||
// Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Limnos,Greece
|
// Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Limnos,Greece
|
||||||
ACE_Humidity[] = {78, 77, 78, 74, 71, 60, 59, 61, 65, 72, 79, 80};
|
ACE_Humidity[] = {78, 77, 78, 74, 71, 60, 59, 61, 65, 72, 79, 80};
|
||||||
|
// Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece
|
||||||
|
ACE_WindSpeedMax[] = {{8.8, 5.5}, {8.8, 5}, {8.6, 4.8}, {7.6, 3.4}, {7.0, 3.0}, {7.1, 3.0}, {7.5, 3.1}, {8.0, 3.2}, {7.6, 3.5}, {7.8, 4.6}, {7.9, 5.0}, {8.2, 5.5}};
|
||||||
|
ACE_WindSpeedMean[] = {4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0};
|
||||||
|
ACE_WindSpeedMin[] = {{0.2, 5.0}, {0.1, 5.0}, {0.2, 4.3}, {0.0, 3.0}, {0.0, 2.1}, {0.0, 2.0}, {0.1, 3.1}, {0.3, 3.1}, {0.0, 3.6}, {0.0, 4.2}, {0.1, 5.0}, {0.2, 5.5}};
|
||||||
|
ACE_WindDirectionProbabilities[] = {{0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02}, // January
|
||||||
|
{0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02}, // February
|
||||||
|
{0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03}, // March
|
||||||
|
{0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04}, // April
|
||||||
|
{0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05}, // May
|
||||||
|
{0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08}, // June
|
||||||
|
{0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09}, // July
|
||||||
|
{0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08}, // August
|
||||||
|
{0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05}, // September
|
||||||
|
{0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03}, // October
|
||||||
|
{0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02}, // November
|
||||||
|
{0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02}};// December
|
||||||
};
|
};
|
||||||
|
|
||||||
class Altis: CAWorld {
|
class Altis: CAWorld {
|
||||||
@ -15,5 +31,21 @@ class CfgWorlds {
|
|||||||
ACE_TempNight[] = {4, 4, 6, 8, 13, 17, 20, 20, 16, 12, 8, 6};
|
ACE_TempNight[] = {4, 4, 6, 8, 13, 17, 20, 20, 16, 12, 8, 6};
|
||||||
// Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Limnos,Greece
|
// Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Limnos,Greece
|
||||||
ACE_Humidity[] = {78, 77, 78, 74, 71, 60, 59, 61, 65, 72, 79, 80};
|
ACE_Humidity[] = {78, 77, 78, 74, 71, 60, 59, 61, 65, 72, 79, 80};
|
||||||
|
// Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece
|
||||||
|
ACE_WindSpeedMax[] = {{8.8, 5.5}, {8.8, 5}, {8.6, 4.8}, {7.6, 3.4}, {7.0, 3.0}, {7.1, 3.0}, {7.5, 3.1}, {8.0, 3.2}, {7.6, 3.5}, {7.8, 4.6}, {7.9, 5.0}, {8.2, 5.5}};
|
||||||
|
ACE_WindSpeedMean[] = {4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0};
|
||||||
|
ACE_WindSpeedMin[] = {{0.2, 5.0}, {0.1, 5.0}, {0.2, 4.3}, {0.0, 3.0}, {0.0, 2.1}, {0.0, 2.0}, {0.1, 3.1}, {0.3, 3.1}, {0.0, 3.6}, {0.0, 4.2}, {0.1, 5.0}, {0.2, 5.5}};
|
||||||
|
ACE_WindDirectionProbabilities[] = {{0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02}, // January
|
||||||
|
{0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02}, // February
|
||||||
|
{0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03}, // March
|
||||||
|
{0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04}, // April
|
||||||
|
{0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05}, // May
|
||||||
|
{0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08}, // June
|
||||||
|
{0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09}, // July
|
||||||
|
{0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08}, // August
|
||||||
|
{0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05}, // September
|
||||||
|
{0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03}, // October
|
||||||
|
{0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02}, // November
|
||||||
|
{0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02}};// December
|
||||||
};
|
};
|
||||||
};
|
};
|
@ -1,44 +1,28 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
// Rain variables
|
// Randomization
|
||||||
GVAR(enableRain) = true;
|
GVAR(temperatureShift) = 3 - random 6;
|
||||||
GVAR(rain_next_period) = -1;
|
GVAR(badWeatherShift) = (random 1) ^ 2 * 10;
|
||||||
GVAR(rain_period_count) = 0;
|
GVAR(humidityShift) = (5 - random 10) / 100;
|
||||||
GVAR(rain_initial_rain) = 0;
|
|
||||||
if(overcast >= 0.7) then {
|
|
||||||
GVAR(rain_initial_rain) = (random ((overcast-0.7)/0.3));
|
|
||||||
};
|
|
||||||
GVAR(current_rain) = GVAR(rain_initial_rain);
|
|
||||||
GVAR(rain_current_range) = -1+(random 2);
|
|
||||||
GVAR(overcast_multiplier) = 1;
|
|
||||||
|
|
||||||
// Wind Variables
|
|
||||||
ACE_wind = [0, 0, 0];
|
|
||||||
GVAR(wind_initial_dir) = (random 360);
|
|
||||||
GVAR(wind_initial_speed) = (overcast*5)+(random (overcast*5)) max 1;
|
|
||||||
GVAR(wind_mean_speed) = GVAR(wind_initial_speed);
|
|
||||||
GVAR(wind_mean_dir) = GVAR(wind_initial_dir);
|
|
||||||
GVAR(wind_current_speed) = GVAR(wind_initial_speed);
|
|
||||||
GVAR(wind_current_dir) = GVAR(wind_initial_dir);
|
|
||||||
GVAR(wind_current_range_speed) = -1+(random 2);
|
|
||||||
GVAR(wind_current_range_dir) = -1+(random 2);
|
|
||||||
GVAR(wind_next_period) = -1; //ceil((2+random(5))/(GVAR(overcast_multiplier)/10));
|
|
||||||
GVAR(wind_next_major_period) = -1;
|
|
||||||
GVAR(wind_period_count) = 0;
|
|
||||||
GVAR(wind_major_period_count) = 0;
|
|
||||||
GVAR(wind_total_time) = 0;
|
|
||||||
GVAR(wind_period_start_time) = time;
|
GVAR(wind_period_start_time) = time;
|
||||||
|
GVAR(rain_period_start_time) = time;
|
||||||
call FUNC(getMapData);
|
|
||||||
|
|
||||||
"ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; };
|
"ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; };
|
||||||
"ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; };
|
"ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; };
|
||||||
"ACE_MISC_PARAMS" addPublicVariableEventHandler {
|
"ACE_MISC_PARAMS" addPublicVariableEventHandler {
|
||||||
if !(isServer) then {
|
if (!isServer) then {
|
||||||
|
if (GVAR(syncMisc)) then {
|
||||||
30 setLightnings (ACE_MISC_PARAMS select 0);
|
30 setLightnings (ACE_MISC_PARAMS select 0);
|
||||||
30 setRainbow (ACE_MISC_PARAMS select 1);
|
30 setRainbow (ACE_MISC_PARAMS select 1);
|
||||||
30 setFog (ACE_MISC_PARAMS select 2);
|
30 setFog (ACE_MISC_PARAMS select 2);
|
||||||
};
|
};
|
||||||
|
GVAR(temperatureShift) = (ACE_MISC_PARAMS select 3);
|
||||||
|
GVAR(badWeatherShift) = (ACE_MISC_PARAMS select 4);
|
||||||
|
GVAR(humidityShift) = (ACE_MISC_PARAMS select 5);
|
||||||
|
call FUNC(updateTemperature);
|
||||||
|
call FUNC(updateHumidity);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
["ACE3", QGVAR(WindInfoKey), localize "STR_ACE_Weather_WindInfoKey",
|
["ACE3", QGVAR(WindInfoKey), localize "STR_ACE_Weather_WindInfoKey",
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user