mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' of https://github.com/acemod/ACE3 into menuonclick
This commit is contained in:
commit
5ec8b6d36c
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,3 +4,4 @@ release/*
|
||||
texHeaders.bin
|
||||
*.swp
|
||||
*.swo
|
||||
*.biprivatekey
|
||||
|
11
AUTHORS.txt
11
AUTHORS.txt
@ -17,7 +17,7 @@ Janus
|
||||
Kieran
|
||||
NouberNou
|
||||
PabstMirror <pabstmirror@gmail.com>
|
||||
Ruthberg
|
||||
Ruthberg <ulteq@web.de>
|
||||
tpM
|
||||
ViperMaul
|
||||
VKing <kauestad@gmail.com>
|
||||
@ -30,9 +30,11 @@ ACCtomeek <tomeek99@gmail.com>
|
||||
Adanteh
|
||||
aeroson
|
||||
Aggr094 <bastards4glory@gmail.com>
|
||||
Alganthe <alganthe@live.fr>
|
||||
Anthariel <Contact@storm-simulation.com>
|
||||
BlackQwar
|
||||
Brakoviejo
|
||||
Brisse <brisse@outlook.com>
|
||||
Clon1998 <ps.patti1998@gmail.com>
|
||||
Codingboy
|
||||
Crusty
|
||||
@ -41,13 +43,14 @@ evromalarkey <evromalarkey@gmail.com>
|
||||
Falke75
|
||||
Ferenczi
|
||||
Ferenzi
|
||||
Filip Basara <filip.basara93@googlemail.com> (Logo)
|
||||
Filip Basara <filip.basara93@googlemail.com>
|
||||
FreeZbe <freeseb@gmail.com>
|
||||
geraldbolso1899
|
||||
Ghost
|
||||
GieNkoV <gienkov.grzegorz@gmail.com>
|
||||
gpgpgpgp
|
||||
Grzegorz
|
||||
Gianmarco Varriale (TeamNuke) <admin@forhost.org>
|
||||
Hamburger SV
|
||||
Harakhti <shadowdragonphd@gmail.com>
|
||||
havena <silveredenis@gmail.com>
|
||||
@ -69,7 +72,7 @@ Raspu86
|
||||
Riccardo Petricca <petriccarcc@gmail.com>
|
||||
Robert Boklahánics <bokirobi@gmail.com>
|
||||
ramius86 <pasini86@hotmail.com>
|
||||
simon84
|
||||
simon84 <badguy360th@gmail.com>
|
||||
Sniperwolf572 <tenga6@gmail.com>
|
||||
Tachi <zaveruha007@gmail.com>
|
||||
Tonic
|
||||
@ -83,3 +86,5 @@ Asgar Serran <piechottaf@web.de>
|
||||
Kavinsky <nmunozfernandez@gmail.com>
|
||||
Coren <coren4@gmail.com>
|
||||
OnkelDisMaster <onkeldismaster@gmail.com>
|
||||
Dimaslg <dimaslg@telecable.e>
|
||||
VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
|
||||
|
2
LICENSE
2
LICENSE
@ -1,4 +1,4 @@
|
||||
Copyright (C) 2014 Felix "KoffeinFlummi" Wiegand
|
||||
Copyright (C) 2015 Felix "KoffeinFlummi" Wiegand
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
87
README.md
87
README.md
@ -1,48 +1,83 @@
|
||||
<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 align="center">
|
||||
<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 href="#">
|
||||
<img src="http://img.shields.io/badge/download-22_MB-blue.svg?style=flat" alt="ACE download">
|
||||
<a href="https://github.com/acemod/ACE3/archive/master.zip">
|
||||
<img src="http://img.shields.io/badge/Download-48.3_MB-green.svg?style=flat"
|
||||
alt="ACE download">
|
||||
</a>
|
||||
<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 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>
|
||||
</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.
|
||||
|
||||
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
|
||||
* Improved medical system
|
||||
* Logistics system including cargo transport and vehicle maintenance
|
||||
* Explosives system including different trigger types
|
||||
### Core features
|
||||
* Brand new 3D interaction/action system
|
||||
* Performance and reliability framework
|
||||
* 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
|
||||
* Realistic names for vehicles and weapons
|
||||
* Realistic ballistics including wind and humidity
|
||||
* Backblast simulation
|
||||
* A fire control system for armored vehicles and helicopters
|
||||
***and more...***
|
||||
* Explosives system, including different trigger types
|
||||
* Map screen improvements – marker placement and map tools
|
||||
* Advanced missile guidance and laser designation
|
||||
|
||||
#### Guides & How-Tos
|
||||
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).
|
||||
#### Additional features
|
||||
* 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
|
||||
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
|
||||
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 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).
|
||||
#### Testing & building
|
||||
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.
|
||||
|
@ -57,7 +57,7 @@ class ACE_Settings {
|
||||
};
|
||||
class GVAR(simulationRadius) {
|
||||
displayName = "Simulation Radius";
|
||||
description = "Defines the radius (in meters) in which advanced ballistics are applied";
|
||||
description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles";
|
||||
typeName = "SCALAR";
|
||||
value = 3000;
|
||||
};
|
||||
|
@ -69,7 +69,7 @@ class CfgVehicles {
|
||||
};
|
||||
class simulationRadius {
|
||||
displayName = "Simulation Radius";
|
||||
description = "Defines the radius (in meters) in which advanced ballistics are applied";
|
||||
description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles";
|
||||
typeName = "NUMBER";
|
||||
defaultValue = 3000;
|
||||
};
|
||||
|
@ -20,19 +20,10 @@ GVAR(WindInfoStart) = time;
|
||||
GVAR(Protractor) = false;
|
||||
GVAR(ProtractorStart) = time;
|
||||
|
||||
// Those are only used in the pure sqf version (extension free PFH)
|
||||
GVAR(SimulationPrecision) = 2;
|
||||
GVAR(WindEnabled) = true;
|
||||
GVAR(SpinDriftEnabled) = true;
|
||||
GVAR(CoriolisEnabled) = true;
|
||||
GVAR(EoetvoesEnabled) = true;
|
||||
GVAR(AdvancedAirDragEnabled) = true;
|
||||
GVAR(TransonicRegionEnabled) = true;
|
||||
GVAR(AtmosphericDensitySimulationEnabled) = true;
|
||||
|
||||
GVAR(currentGrid) = 0;
|
||||
GVAR(INIT_MESSAGE_ENABLED) = false;
|
||||
|
||||
GVAR(extensionAvailable) = true;
|
||||
/* @TODO: Remove this until verisoning is in sync with cmake/build versioning
|
||||
GVAR(extensionVersion) = ("ace_advanced_ballistics" callExtension "version");
|
||||
GVAR(extensionAvailable) = (GVAR(extensionVersion) == EXTENSION_REQUIRED_VERSION);
|
||||
|
@ -19,7 +19,7 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleAccessory", "_initSpeedCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef"];
|
||||
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef", "_ballisticCoefficients", "_velocityBoundaries"];
|
||||
_unit = _this select 0;
|
||||
_weapon = _this select 1;
|
||||
_mode = _this select 3;
|
||||
@ -35,49 +35,34 @@ if (!([_unit] call EFUNC(common,isPlayer))) exitWith {};
|
||||
if (underwater _unit) exitWith {};
|
||||
if (!(_ammo isKindOf "BulletBase")) exitWith {};
|
||||
if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {};
|
||||
if (GVAR(onlyActiveForLocalPlayers) && _unit != ACE_player) then { _abort = true; };
|
||||
//if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // TODO: We currently do not have firedEHs on vehicles
|
||||
if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; };
|
||||
|
||||
if (_abort && alwaysSimulateForSnipers) then {
|
||||
if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then {
|
||||
if (GVAR(alwaysSimulateForSnipers)) then {
|
||||
// The shooter is non local
|
||||
if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then {
|
||||
_opticsName = (primaryWeaponItems _unit) select 2;
|
||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_abort = _opticType != 2; // We only abort if the non local shooter is not a sniper
|
||||
};
|
||||
} else {
|
||||
_abort = true;
|
||||
};
|
||||
};
|
||||
//if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // TODO: We currently do not have firedEHs on vehicles
|
||||
if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; };
|
||||
|
||||
if (_abort || !(GVAR(extensionAvailable))) exitWith {
|
||||
[_bullet, getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH);
|
||||
};
|
||||
|
||||
_airFriction = getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction");
|
||||
_muzzleVelocity = getNumber(configFile >> "cfgMagazines" >> _magazine >> "initSpeed");
|
||||
_muzzleVelocityCoef = getNumber(configFile >> "cfgWeapons" >> _weapon >> "initSpeed");
|
||||
if (_muzzleVelocityCoef > 0) then {
|
||||
_muzzleVelocity = _muzzleVelocityCoef;
|
||||
};
|
||||
if (_muzzleVelocityCoef < 0) then {
|
||||
_muzzleVelocity = _muzzleVelocity * (-1 * _muzzleVelocityCoef);
|
||||
};
|
||||
|
||||
_muzzleAccessory = "";
|
||||
switch (currentWeapon _unit) do {
|
||||
case primaryWeapon _unit: { _muzzleAccessory = (primaryWeaponItems _unit) select 0; };
|
||||
case handgunWeapon _unit: { _muzzleAccessory = (handgunItems _unit) select 0; };
|
||||
};
|
||||
|
||||
if (_muzzleAccessory != "" && isNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed")) then {
|
||||
_initSpeedCoef = getNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed");
|
||||
_muzzleVelocity = _muzzleVelocity * _initSpeedCoef;
|
||||
};
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_muzzleVelocity = vectorMagnitude _bulletVelocity;
|
||||
|
||||
if (GVAR(barrelLengthInfluenceEnabled)) then {
|
||||
_muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift);
|
||||
if (_muzzleVelocityShift != 0) then {
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||
};
|
||||
@ -87,19 +72,23 @@ if (GVAR(ammoTemperatureEnabled)) then {
|
||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
||||
_muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
|
||||
if (_muzzleVelocityShift != 0) then {
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||
_bullet setVelocity _bulletVelocity;
|
||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||
};
|
||||
};
|
||||
|
||||
_bulletTraceVisible = false;
|
||||
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER" && currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
||||
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER") then {
|
||||
if (currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]) then {
|
||||
_bulletTraceVisible = true;
|
||||
} else {
|
||||
if (currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
||||
_opticsName = (primaryWeaponItems ACE_player) select 2;
|
||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||
_bulletTraceVisible = (_opticType == 2 || currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]);
|
||||
_bulletTraceVisible = _opticType == 2;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
_caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber");
|
||||
@ -131,32 +120,33 @@ _dragModel = 1;
|
||||
_ballisticCoefficients = [];
|
||||
_velocityBoundaries = [];
|
||||
_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");
|
||||
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
||||
_dragModel = 1;
|
||||
};
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then {
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then {
|
||||
_ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients");
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then {
|
||||
};
|
||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then {
|
||||
_velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries");
|
||||
};
|
||||
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
||||
};
|
||||
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
||||
_atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
||||
};
|
||||
};
|
||||
|
||||
#ifdef USE_ADVANCEDBALLISTICS_DLL
|
||||
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||
|
||||
[{
|
||||
private ["_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||
EXPLODE_4_PVT(_this select 0,_bullet,_caliber,_bulletTraceVisible,_index);
|
||||
[{
|
||||
private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||
_args = _this select 0;
|
||||
_bullet = _args select 0;
|
||||
_caliber = _args select 1;
|
||||
_bulletTraceVisible = _args select 2;
|
||||
_index = _args select 3;
|
||||
|
||||
_bulletVelocity = velocity _bullet;
|
||||
_bulletPosition = getPosASL _bullet;
|
||||
@ -173,211 +163,4 @@ 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)]);
|
||||
|
||||
}, 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
|
||||
}, GVAR(simulationInterval), [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]] call CBA_fnc_addPerFrameHandler;
|
||||
|
@ -1,8 +1,6 @@
|
||||
#define COMPONENT advanced_ballistics
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
#define USE_ADVANCEDBALLISTICS_DLL
|
||||
|
||||
#ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="AdvancedBallistics">
|
||||
<Key ID="STR_ACE_AdvancedBallistics_WindInfoKey">
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Aircraft">
|
||||
<Key ID="STR_ACE_Aircraft_CMFlareLauncher_Burst_Name">
|
||||
@ -29,23 +29,25 @@
|
||||
<English>Open Cargo Door</English>
|
||||
<German>Laderampe öffnen</German>
|
||||
<Spanish>Abrir compuerta de carga</Spanish>
|
||||
<French>Ourvir rampe cargo</French>
|
||||
<French>Ourvir la rampe</French>
|
||||
<Polish>Otwórz drzwi ładowni</Polish>
|
||||
<Czech>Otevřít nákladní prostor</Czech>
|
||||
<Hungarian>Rakodórámpa nyitása</Hungarian>
|
||||
<Russian>Открыть грузовой отсек</Russian>
|
||||
<Italian>Apri la porta del cargo</Italian>
|
||||
<Portuguese>Abrir porta de carga</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Aircraft_CloseCargoRamp">
|
||||
<English>Close Cargo Door</English>
|
||||
<German>Laderampe schließen</German>
|
||||
<Spanish>Cerrar compuerta de carga</Spanish>
|
||||
<French>Fermer rampe cargo</French>
|
||||
<French>Fermer la rampe</French>
|
||||
<Polish>Zamknij drzwi ładowni</Polish>
|
||||
<Czech>Zavřít nákladní prostor</Czech>
|
||||
<Hungarian>Rakodórámpa zárása</Hungarian>
|
||||
<Russian>Закрыть грузовой отсек</Russian>
|
||||
<Italian>Chiudi la porta del cargo</Italian>
|
||||
<Portuguese>Fechar porta de carga</Portuguese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -760,7 +760,7 @@ class ATragMX_Display {
|
||||
y=0.265*safezoneH+safezoneY+0.35;
|
||||
strings[]={"Height","Width"};
|
||||
values[]={1,0};
|
||||
onToolBoxSelChanged="GVAR(rangeAssistUseTargetHeight)=((_this select 1)==0)";
|
||||
onToolBoxSelChanged=QUOTE(GVAR(rangeAssistUseTargetHeight) = ((_this select 1) == 0));
|
||||
};
|
||||
class TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE: TEXT_TARGET_RANGE_ASSIST_MEASUREMENT_METHOD {
|
||||
idc=7003;
|
||||
|
@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then {
|
||||
private ["_bulletLength", "_stabilityFactor"];
|
||||
_bulletLength = 1.8;
|
||||
_stabilityFactor = 1.5;
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||
};
|
||||
|
@ -106,7 +106,7 @@ private ["_wind1", "_wind2", "_windDrift"];
|
||||
_wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0];
|
||||
_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0];
|
||||
_windDrift = 0;
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
_bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection);
|
||||
};
|
||||
|
||||
@ -117,7 +117,7 @@ _speedAverage = 0;
|
||||
|
||||
private ["_eoetvoesMultiplier"];
|
||||
_eoetvoesMultiplier = 0;
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
_eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire);
|
||||
};
|
||||
|
||||
@ -142,14 +142,12 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
|
||||
_trueSpeed = vectorMagnitude _trueVelocity;
|
||||
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false]) then {
|
||||
_drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then {
|
||||
parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed]))
|
||||
} else {
|
||||
([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation))
|
||||
};
|
||||
_bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag);
|
||||
};
|
||||
} else {
|
||||
_bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction);
|
||||
};
|
||||
@ -177,24 +175,21 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
|
||||
_kineticEnergy = _kineticEnergy * 0.737562149;
|
||||
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then {
|
||||
// Coriolis
|
||||
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
||||
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
||||
_windage1 = _windage1 + _horizontalCoriolis;
|
||||
_windage2 = _windage2 + _horizontalCoriolis;
|
||||
};
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
||||
// Eoetvoes
|
||||
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
||||
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
||||
_elevation = _elevation + _verticalCoriolis;
|
||||
};
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then {
|
||||
// Spin drift
|
||||
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
||||
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
||||
_windage1 = _windage1 + _spinDrift;
|
||||
_windage2 = _windage2 + _spinDrift;
|
||||
};
|
||||
};
|
||||
|
||||
GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]];
|
||||
_n = _n + 1;
|
||||
@ -217,23 +212,20 @@ _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2));
|
||||
_kineticEnergy = _kineticEnergy * 0.737562149;
|
||||
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then {
|
||||
// Coriolis
|
||||
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
||||
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
||||
_windage1 = _windage1 + _horizontalCoriolis;
|
||||
_windage2 = _windage2 + _horizontalCoriolis;
|
||||
};
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
||||
// Eoetvoes
|
||||
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
||||
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
||||
_elevation = _elevation + _verticalCoriolis;
|
||||
};
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then {
|
||||
// Spin drift
|
||||
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
||||
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
||||
_windage1 = _windage1 + _spinDrift;
|
||||
_windage2 = _windage2 + _spinDrift;
|
||||
};
|
||||
};
|
||||
|
||||
[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60]
|
||||
|
@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then {
|
||||
private ["_bulletLength", "_stabilityFactor"];
|
||||
_bulletLength = 1.8;
|
||||
_stabilityFactor = 1.5;
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||
};
|
||||
|
@ -60,7 +60,7 @@ private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifl
|
||||
_boreHeight = parseNumber(ctrlText 120000);
|
||||
_bulletMass = parseNumber(ctrlText 120010);
|
||||
_bulletDiameter = parseNumber(ctrlText 120020);
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
_airFriction = 0.1 max parseNumber(ctrlText 120030) min 2;
|
||||
} else {
|
||||
_airFriction = parseNumber(ctrlText 120030) / -1000;
|
||||
@ -87,7 +87,7 @@ GVAR(workingMemory) set [5, _boreHeight];
|
||||
GVAR(workingMemory) set [12, _bulletMass];
|
||||
GVAR(workingMemory) set [13, _bulletDiameter];
|
||||
GVAR(workingMemory) set [14, _rifleTwist];
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
GVAR(workingMemory) set [15, _airFriction];
|
||||
} else {
|
||||
GVAR(workingMemory) set [4, _airFriction];
|
||||
|
@ -26,7 +26,7 @@ if (GVAR(currentUnit) != 2) then {
|
||||
} else {
|
||||
ctrlSetText [110, Str(Round(GVAR(workingMemory) select 12))];
|
||||
};
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
||||
} else {
|
||||
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
||||
|
@ -32,7 +32,7 @@ if (GVAR(currentUnit) != 2) then {
|
||||
} else {
|
||||
ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) * 1000) / 1000)];
|
||||
};
|
||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
||||
} else {
|
||||
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="ATragMX">
|
||||
<Key ID="STR_ACE_ATragMX_Name">
|
||||
@ -21,6 +20,7 @@
|
||||
<Spanish>Abrir ATragMX</Spanish>
|
||||
<French>Ouvrir ATragMX</French>
|
||||
<German>ATragMX öffnen</German>
|
||||
<Italian>Apri ATragMX</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ATragMX_Description">
|
||||
<English>Rugged PDA with ATragMX</English>
|
||||
@ -28,6 +28,8 @@
|
||||
<Russian>Защищенный КПК с ATragMX</Russian>
|
||||
<Spanish>PDA rugerizada con ATragMX</Spanish>
|
||||
<German>Robuster PDA mit ATragMX</German>
|
||||
<French>PDA robuste avec ATragMX</French>
|
||||
<Italian>PDA Robusto con ATragMX</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ATragMX_ATragMXDialogKey">
|
||||
<English>Open ATragMX</English>
|
||||
@ -36,6 +38,7 @@
|
||||
<Spanish>Abrir ATragMX</Spanish>
|
||||
<French>Ouvrir ATragMX</French>
|
||||
<German>ATragMX öffnen</German>
|
||||
<Italian>Apri ATragMX</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -176,8 +176,10 @@
|
||||
<Russian>Не удалось присоединить</Russian>
|
||||
<Spanish>Error al acoplar</Spanish>
|
||||
<Czech>Připnutí selhalo</Czech>
|
||||
<Portuguese>Erro ao anexar</Portuguese>
|
||||
<Polish>Przyczepianie nie powiodło się</Polish>
|
||||
<Hungarian>Hozzácsatolás sikertelen</Hungarian>
|
||||
<Italian>Impossibile Attaccare</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_Item_Attached">
|
||||
<English>%1<br/>Attached</English>
|
||||
|
@ -337,7 +337,7 @@ class CfgAmmo {
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.353;
|
||||
ACE_bulletMass=190;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||
ACE_ballisticCoefficients[]={0.268};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
@ -353,7 +353,7 @@ class CfgAmmo {
|
||||
ACE_caliber=0.308;
|
||||
ACE_bulletLength=1.489;
|
||||
ACE_bulletMass=220;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||
ACE_ballisticCoefficients[]={0.310};
|
||||
ACE_velocityBoundaries[]={};
|
||||
ACE_standardAtmosphere="ICAO";
|
||||
@ -572,7 +572,6 @@ class CfgAmmo {
|
||||
ACE_caliber=0.366;
|
||||
ACE_bulletLength=1.350;
|
||||
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_ballisticCoefficients[]={0.368};
|
||||
ACE_velocityBoundaries[]={};
|
||||
|
@ -322,13 +322,14 @@ class CfgMagazines {
|
||||
class 10Rnd_762x54_Mag: 10Rnd_762x51_Mag {
|
||||
initSpeed = 800;
|
||||
};
|
||||
class ACE_10Rnd_762x54_Tracer_mag: 16Rnd_9x21_Mag {
|
||||
class ACE_10Rnd_762x54_Tracer_mag: 10Rnd_762x54_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_762x54_Ball_7T2";
|
||||
displayName = "$STR_ACE_10Rnd_762x54_Tracer_mag_Name";
|
||||
displayNameShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_NameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_Description";
|
||||
initSpeed = 800;
|
||||
tracersEvery = 1;
|
||||
};
|
||||
|
||||
class 150Rnd_762x54_Box: 150Rnd_762x51_Box {
|
||||
|
@ -42,6 +42,7 @@ class CfgVehicles {
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||
@ -59,6 +60,7 @@ class CfgVehicles {
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4);
|
||||
@ -82,6 +84,7 @@ class CfgVehicles {
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||
};
|
||||
};
|
||||
@ -200,6 +203,7 @@ class CfgVehicles {
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_0_Mag,4);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_1_Mag,4);
|
||||
|
@ -509,6 +509,7 @@ class CfgWeapons {
|
||||
class srifle_EBR_F: EBR_base_F {
|
||||
magazines[] = {
|
||||
"20Rnd_762x51_Mag",
|
||||
"ACE_20Rnd_762x51_Mag_Tracer",
|
||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||
@ -560,6 +561,7 @@ class CfgWeapons {
|
||||
class srifle_DMR_03_F: DMR_03_base_F {
|
||||
magazines[] = {
|
||||
"20Rnd_762x51_Mag",
|
||||
"ACE_20Rnd_762x51_Mag_Tracer",
|
||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||
@ -584,6 +586,7 @@ class CfgWeapons {
|
||||
class srifle_DMR_06_camo_F: DMR_06_base_F {
|
||||
magazines[] = {
|
||||
"20Rnd_762x51_Mag",
|
||||
"ACE_20Rnd_762x51_Mag_Tracer",
|
||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {"ACE_TargetWall"};
|
||||
units[] = {"ACE_TargetWall","ACE_Box_Ammo"};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
|
@ -1,6 +1,8 @@
|
||||
// by commy2
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_wall", "_paper"];
|
||||
|
||||
_wall = _this select 0;
|
||||
|
||||
if (local _wall) then {
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -101,25 +101,20 @@ class CfgVehicles {
|
||||
#define MACRO_LOADUNLOADCAPTIVE \
|
||||
class ACE_Actions { \
|
||||
class ACE_MainActions { \
|
||||
selection = ""; \
|
||||
class ACE_LoadCaptive { \
|
||||
class GVAR(LoadCaptive) { \
|
||||
displayName = "$STR_ACE_Captives_LoadCaptive"; \
|
||||
distance = 4; \
|
||||
condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \
|
||||
statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \
|
||||
exceptions[] = {"isNotEscorting"}; \
|
||||
showDisabled = 0; \
|
||||
priority = 1.2; \
|
||||
hotkey = "L"; \
|
||||
}; \
|
||||
class ACE_UnloadCaptive { \
|
||||
class GVAR(UnloadCaptive) { \
|
||||
displayName = "$STR_ACE_Captives_UnloadCaptive"; \
|
||||
distance = 4; \
|
||||
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \
|
||||
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \
|
||||
showDisabled = 0; \
|
||||
priority = 1.2; \
|
||||
hotkey = "C"; \
|
||||
}; \
|
||||
}; \
|
||||
};
|
||||
|
@ -22,7 +22,7 @@ PARAMS_3(_unit,_target,_state);
|
||||
if (_state) then {
|
||||
if (_unit getVariable [QGVAR(isEscorting), false]) exitWith {};
|
||||
|
||||
[_unit, _target] call EFUNC(common,claim);
|
||||
[_unit, _target, false] call EFUNC(common,claim);
|
||||
_unit setVariable [QGVAR(isEscorting), true, true];
|
||||
|
||||
_target attachTo [_unit, [0, 1, 0]];
|
||||
@ -34,8 +34,7 @@ if (_state) then {
|
||||
{[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);},
|
||||
nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))];
|
||||
|
||||
private "_escortFnc";
|
||||
_escortFnc = {
|
||||
[{
|
||||
EXPLODE_3_PVT((_this select 0),_unit,_target,_actionID);
|
||||
if (_unit getVariable [QGVAR(isEscorting), false]) then {
|
||||
if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then {
|
||||
@ -45,13 +44,12 @@ if (_state) then {
|
||||
|
||||
if (!(_unit getVariable [QGVAR(isEscorting), false])) then {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
[objNull, _target] call EFUNC(common,claim);
|
||||
[objNull, _target, false] call EFUNC(common,claim);
|
||||
detach _target;
|
||||
_unit removeAction _actionID;
|
||||
_unit setVariable [QGVAR(escortedUnit), objNull, true];
|
||||
};
|
||||
};
|
||||
[_escortFnc, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
|
||||
}, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
} else {
|
||||
_unit setVariable [QGVAR(isEscorting), false, true];
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Captives">
|
||||
<Key ID="STR_ACE_Captives_SetCaptive">
|
||||
@ -119,6 +119,7 @@
|
||||
<Polish>Ekwipunek rewidowanej osoby</Polish>
|
||||
<Russian>Инвентарь обысканного человека</Russian>
|
||||
<Portuguese>Inventário da pessoa revistada</Portuguese>
|
||||
<Italian>Inventario delle persone perquisite</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_FriskPerson">
|
||||
<English>Frisk person</English>
|
||||
@ -137,6 +138,7 @@
|
||||
<French>Se rendre</French>
|
||||
<German>Kapitulieren</German>
|
||||
<Spanish>Rendirse</Spanish>
|
||||
<Portuguese>Render-se</Portuguese>
|
||||
<Czech>Vzdát se</Czech>
|
||||
<Polish>Poddaj się</Polish>
|
||||
<Russian>Сдаться</Russian>
|
||||
@ -148,6 +150,7 @@
|
||||
<French>Annuler la capitulation</French>
|
||||
<German>Den Kampf erneut aufnehmen</German>
|
||||
<Spanish>Dejar de rendirse</Spanish>
|
||||
<Portuguese>Parar de se render</Portuguese>
|
||||
<Czech>Přestat se vzdávat</Czech>
|
||||
<Polish>Podejmij walkę ponownie</Polish>
|
||||
<Russian>Прекратить сдачу в плен</Russian>
|
||||
@ -181,6 +184,7 @@
|
||||
<French>Rien sous le curseur</French>
|
||||
<German>Es wurde nichts ausgewählt</German>
|
||||
<Spanish>Nada bajo el ratón</Spanish>
|
||||
<Portuguese>Nada debaixo do mouse</Portuguese>
|
||||
<Czech>Nic není vybráno</Czech>
|
||||
<Polish>Nie ma nic pod kursorem</Polish>
|
||||
<Russian>Ничего не выделено</Russian>
|
||||
|
@ -24,7 +24,7 @@ class Extended_InitPost_EventHandlers {
|
||||
init = QUOTE(if (local (_this select 0)) then {_this call FUNC(setName)};);
|
||||
};
|
||||
class GVAR(forceWalk) {
|
||||
init = QUOTE(if (local (_this select 0)) then {_this call FUNC(applyForceWalkStatus);};);
|
||||
init = QUOTE(_this call FUNC(applyForceWalkStatus));
|
||||
};
|
||||
class GVAR(muteUnit) {
|
||||
init = QUOTE(_this call FUNC(muteUnitHandleInitPost));
|
||||
|
15
addons/common/CfgUnitInsignia.hpp
Normal file
15
addons/common/CfgUnitInsignia.hpp
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
class CfgUnitInsignia {
|
||||
class ACE_insignia_logo {
|
||||
displayName = "ACE3";
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
texture = PATHTOF(data\Insignia_ace3logo_ca.paa);
|
||||
textureVehicle = "";
|
||||
};
|
||||
class ACE_insignia_banana {
|
||||
displayName = "ABE3";
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
texture = PATHTOF(data\insignia_banana_ca.paa);
|
||||
textureVehicle = "";
|
||||
};
|
||||
};
|
@ -15,7 +15,7 @@ class CfgWeapons {
|
||||
class ACE_FakePrimaryWeapon: Rifle_Base_F {
|
||||
scope = 2;
|
||||
scopeCurator = 1;
|
||||
|
||||
scopeArsenal = 1;
|
||||
displayName = "";
|
||||
model = "\A3\Weapons_f\empty";
|
||||
picture = "";
|
||||
|
@ -97,14 +97,16 @@ if (!hasInterface) exitWith {};
|
||||
call COMPILE_FILE(scripts\assignedItemFix);
|
||||
call COMPILE_FILE(scripts\initScrollWheel);
|
||||
|
||||
0 spawn {
|
||||
while {true} do {
|
||||
DFUNC(mouseZHandler) = {
|
||||
waitUntil {!isNull (findDisplay 46)}; sleep 0.1;
|
||||
findDisplay 46 displayAddEventHandler ["MouseZChanged", QUOTE( _this call GVAR(onScrollWheel) )];
|
||||
[false] call FUNC(disableUserInput);
|
||||
waitUntil {isNull (findDisplay 46)};
|
||||
};
|
||||
};
|
||||
|
||||
addMissionEventHandler ["Loaded", {[] spawn FUNC(mouseZHandler)}];
|
||||
[] spawn FUNC(mouseZHandler);
|
||||
|
||||
|
||||
enableCamShake true;
|
||||
|
||||
// Set the name for the current player
|
||||
|
@ -22,6 +22,7 @@ class CfgPatches {
|
||||
#include "CfgActions.hpp"
|
||||
#include "CfgMoves.hpp"
|
||||
#include "CfgVoice.hpp"
|
||||
#include "CfgUnitInsignia.hpp"
|
||||
|
||||
class ACE_Rsc_Display_Base {
|
||||
idd = -1;
|
||||
|
BIN
addons/common/data/insignia_ace3logo_ca.paa
Normal file
BIN
addons/common/data/insignia_ace3logo_ca.paa
Normal file
Binary file not shown.
BIN
addons/common/data/insignia_banana_ca.paa
Normal file
BIN
addons/common/data/insignia_banana_ca.paa
Normal file
Binary file not shown.
@ -37,3 +37,4 @@ if (isPlayer _unit) then {
|
||||
};
|
||||
}foreach ([_unit] call FUNC(getAllDefinedSetVariables));
|
||||
|
||||
_unit setVariable ["ACE_forceWalkStatusNumber", 0, true];
|
||||
|
@ -50,4 +50,4 @@ _bitmaskNumber = _forceWalkReasonsBooleans call FUNC(toBitmask);
|
||||
_unit setVariable ["ACE_forceWalkStatusNumber", _bitmaskNumber, true];
|
||||
|
||||
// actually apply the forceWalk command globaly
|
||||
[[_unit], QUOTE(FUNC(applyForceWalkStatus)), _unit] call FUNC(execRemoteFnc);
|
||||
[[_unit], QUOTE(FUNC(applyForceWalkStatus)), 2] call FUNC(execRemoteFnc);
|
||||
|
@ -276,6 +276,7 @@
|
||||
<Russian>Выключить командное меню</Russian>
|
||||
<Hungarian>Parancsnoki menü kikapcsolása</Hungarian>
|
||||
<Italian>Disabilita Menù di comando</Italian>
|
||||
<Portuguese>Desabilitar menu de comando</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Unknown">
|
||||
<English>Unknown</English>
|
||||
@ -287,6 +288,7 @@
|
||||
<Hungarian>Ismeretlen</Hungarian>
|
||||
<Italian>Sconosciuto</Italian>
|
||||
<French>Inconnu</French>
|
||||
<Portuguese>Desconhecido</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_NoVoice">
|
||||
<English>No Voice</English>
|
||||
@ -298,6 +300,7 @@
|
||||
<Hungarian>Nincs hang</Hungarian>
|
||||
<Italian>Senza voce</Italian>
|
||||
<French>Pas de voix</French>
|
||||
<Portuguese>Sem voz</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TITLE">
|
||||
<English>Accept Requests</English>
|
||||
@ -309,6 +312,7 @@
|
||||
<French>Accepter requête</French>
|
||||
<Russian>Принять запросы</Russian>
|
||||
<Hungarian>Kérések elfogadása</Hungarian>
|
||||
<Portuguese>Aceitar Pedido</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
|
||||
<English>Decline Requests</English>
|
||||
@ -320,6 +324,7 @@
|
||||
<Russian>Отклонить запросы</Russian>
|
||||
<French>Rejeter requête</French>
|
||||
<Hungarian>Kérések elutasítása</Hungarian>
|
||||
<Portuguese>Rejeitar pedido</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP">
|
||||
<English>Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
|
||||
@ -331,6 +336,7 @@
|
||||
<Russian>Принять запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий</Russian>
|
||||
<French>Accepter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions.</French>
|
||||
<Hungarian>Más játékosok általi kérések elfogadása. Ezek a kérések vonatkozhatnak a felszerelés használatára/megosztására, valamint különböző cselekményekre.</Hungarian>
|
||||
<Portuguese>Aceitar pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações.</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP">
|
||||
<English>Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
|
||||
@ -342,6 +348,7 @@
|
||||
<Russian>Отклонить запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий</Russian>
|
||||
<French>Rejeter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions.</French>
|
||||
<Hungarian>Más játékosok általi kérések elutasítása. Ezek a kérések vonatkozhatnak a felszerelés használatára/megosztására, valamint különböző cselekményekre.</Hungarian>
|
||||
<Portuguese>Rejeita pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações.</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingFeedbackIconsName">
|
||||
<English>Feedback icons</English>
|
||||
@ -353,6 +360,7 @@
|
||||
<French>Icones d'information</French>
|
||||
<Czech>Pomocné ikony</Czech>
|
||||
<Hungarian>Visszajelző ikonok</Hungarian>
|
||||
<Portuguese>Ícones de Feedback</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingFeedbackIconsDesc">
|
||||
<English>Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed.</English>
|
||||
@ -364,6 +372,7 @@
|
||||
<French>Sélection de la position ou la désactivation des icones de feedback. Ces icones vous apportent des informations complémentaires sur votre status et sur les actions en cours.</French>
|
||||
<Czech>Nastavuje pozici nebo vypíná pomocné ikony. Tyto ikony ukazují extra informace ke stavu postavy a vykonávaných činností.</Czech>
|
||||
<Hungarian>Itt beállítható a visszajelző ikonok képernyőn lévő helyzete és jelenléte. Ezek az ikonok extra visszajelzést biztosítanak a karaktered állapotán és végrehajtott cselekvésein.</Hungarian>
|
||||
<Portuguese>Selecione a posição ou disabilite a posição dos ícones de feedback na sua tela. Esses ícones irão aparecer para mostrar feedback extra do status do seu personagem e ações realizadas.</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingProgressbarLocationName">
|
||||
<English>Progress bar location</English>
|
||||
@ -375,28 +384,31 @@
|
||||
<French>Position de la barre de progression</French>
|
||||
<Czech>Pozice ukazetele průběhu činnosti</Czech>
|
||||
<Hungarian>Állapotjelző sáv helyzete</Hungarian>
|
||||
<Portuguese>Local da barra de progresso</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingProgressbarLocationDesc">
|
||||
<English>Set the desired location of the progress bar on your screen.</English>
|
||||
<German>Setze die gewünschte Position der Fortschrittsanzeige fest.</German>
|
||||
<Spanish>Seleccionar la ubicación deseada de la barra de progreso en tu pantalla</Spanish>
|
||||
<Italian>Modifica la posizione su schermo della barra di avanzamento.</Italian>
|
||||
<Italian>Modifica la posizione della barra di avanzamernto sullo schermo</Italian>
|
||||
<Russian>Установите желаемое положение строки состояния на экране.</Russian>
|
||||
<Polish>Ustaw pożądaną lokalizację paska postępu na ekranie</Polish>
|
||||
<French>Appliquer la position de la barre de progression sur l'écran</French>
|
||||
<Czech>Nastavuje pozici ukazetele průběhu činnosti na vaší obrazovce.</Czech>
|
||||
<Hungarian>Itt beállítható az állapotjelző sáv képernyődön lévő helyzete.</Hungarian>
|
||||
<Portuguese>Define o local desejado da barra de progresso na sua tela.</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextColorName">
|
||||
<English>Hint Background color</English>
|
||||
<German>Hintergrundfarbe der Hinweise</German>
|
||||
<Spanish>Color de fondo de las notificaciones</Spanish>
|
||||
<Italian>Sfondo dei Suggerimenti</Italian>
|
||||
<Italian>Colore di sfondo dei Suggerimenti</Italian>
|
||||
<Russian>Цвет фона всплывающих подсказок</Russian>
|
||||
<Polish>Kolor tła powiadomień</Polish>
|
||||
<French>Notification: couleur de l'arrière plan</French>
|
||||
<Czech>Barva pozadí nápovědy</Czech>
|
||||
<Hungarian>Súgó háttérszíne</Hungarian>
|
||||
<Portuguese>Cor do fundo da hint</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextColorDesc">
|
||||
<English>The color of the background from the ACE hints.</English>
|
||||
@ -408,28 +420,31 @@
|
||||
<French>Notification ACE: couleur de l'arrière plan</French>
|
||||
<Czech>Barva pozadí ACE nápověd.</Czech>
|
||||
<Hungarian>Az ACE-súgók hátterének színe.</Hungarian>
|
||||
<Portuguese>A cor de fundo das hints do ACE.</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorName">
|
||||
<English>Hint text font color</English>
|
||||
<German>Textfarbe der Hinweise</German>
|
||||
<Spanish>Color del texto de las notificaciones</Spanish>
|
||||
<Italian>Testo dei Suggerimenti</Italian>
|
||||
<Italian>Il colore del Testo dei Suggerimenti</Italian>
|
||||
<Russian>Цвет шрифта всплывающих подсказок</Russian>
|
||||
<Polish>Kolor tekstu powiadomień</Polish>
|
||||
<French>Notification: couleur du texte</French>
|
||||
<Czech>Barva fontu nápověd.</Czech>
|
||||
<Hungarian>Súgószöveg betűinek színe</Hungarian>
|
||||
<Portuguese>Cor do do texto da hint</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorDesc">
|
||||
<English>The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified.</English>
|
||||
<German>Wähle die Textfarbe für ACE-Hinweise. Die gewählte Farbe wird als Standartfarbe der Hinweise angezeigt, wenn der Hinweis selbst keine spezifische Farbe hat. </German>
|
||||
<Spanish>El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado.</Spanish>
|
||||
<Italian>Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato.</Italian>
|
||||
<Italian>Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se il colore del testo non è specificato.</Italian>
|
||||
<Russian>Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок.</Russian>
|
||||
<Polish>Kolor tekstu dla powiadomień ACE. Ten kolor jest domyślnym dla wszystkich tekstów wyświetlanych poprzez System Powiadomień ACE, jeżeli dla powiadomienia nie określono innego koloru.</Polish>
|
||||
<French>Notification ACE: couleur du texte. C'est la couleur par défaut de tout texte affiché dans les notifications ACE, si aucune couleur n'est spécifiée pour les notifications</French>
|
||||
<Czech>Barva fontu ACE nápověd. Toto je standardní barva pro všechen text zobrazovaný ACE nápovědami, pokud nemá nápověda žádnou specifikanou barvu.</Czech>
|
||||
<Hungarian>Az ACE-súgók betűkészletének színek. Ez a szín alapértelmezett az összes szövegre az ACE-súgórendszerben, ha a súgószöveg maga nem ad meg más színt.</Hungarian>
|
||||
<Portuguese>A cor do texto das hints do ACE. Essa cor é a cor default para todos os texos exibidos pelo sistema de hints do ACE , caso o texto da hint não tem outra cor especificada.</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_bananaDisplayName">
|
||||
<English>Banana</English>
|
||||
@ -441,17 +456,19 @@
|
||||
<Polish>Banan</Polish>
|
||||
<French>Banane</French>
|
||||
<Hungarian>Banán</Hungarian>
|
||||
<Portuguese>Banana</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_bananaDescr">
|
||||
<English>A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa.</English>
|
||||
<German>Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen).</German>
|
||||
<Spanish>Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa.</Spanish>
|
||||
<Czech>Banán je protáhlé ovoce a plod banánovníku (epigeická bobule).</Czech>
|
||||
<Italian>Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotto da un gran numero di grandi pianti erbacee dotate di fiori, della famiglia delle Musaceae.</Italian>
|
||||
<Italian>Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotta da un gran numero di grandi piante erbacee dotate di fiori, della famiglia delle Musaceae.</Italian>
|
||||
<Russian>Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa).</Russian>
|
||||
<Hungarian>A banán egy ehető gyümölcs, technikai szempontból bogyótermés, melyet több fürtvirágzatú növény termel a Musa rendszertani nemzetségben.</Hungarian>
|
||||
<Polish>Rodzaj roślin z rodziny bananowatych, obejmujący około 80 gatunków.<br />Przedstawiciele są typowymi przedstawicielami flory międzyzwrotnikowej Azji, Afryki i Australii.<br />Część gatunków dostarcza jadalnych owoców. Słowo banan pochodzi prawdopodobnie od arabskiego słowa banan, co oznacza palec, lub afrykańskiego języka wolof, w którym rośliny te określa się mianem banaana.</Polish>
|
||||
<French>Une banane est un fruit qui, d'un point de vue botanique, fait partie du groupe des baies. Produite par plusieurs sortes de grandes plantes à fleurs herbacées du type Musa.</French>
|
||||
<Portuguese>A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa.</Portuguese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -60,7 +60,7 @@ GVAR(disarmTarget) = _target;
|
||||
|
||||
//Setup PFEH
|
||||
[{
|
||||
private ["_groundContainer", "_targetContainer", "_playerName", "_rankPicture", "_rankIndex", "_targetUniqueItems", "_holderUniqueItems"];
|
||||
private ["_groundContainer", "_targetContainer", "_playerName", "_rankPicture", "_rankIndex", "_targetUniqueItems", "_holderUniqueItems", "_holder"];
|
||||
disableSerialization;
|
||||
EXPLODE_2_PVT(_this,_args,_pfID);
|
||||
EXPLODE_3_PVT(_args,_player,_target,_display);
|
||||
|
@ -11,6 +11,7 @@
|
||||
<Hungarian>Elhasznált kilövőcső</Hungarian>
|
||||
<Russian>Отстрелянная труба</Russian>
|
||||
<Italian>Tubo utilizzato</Italian>
|
||||
<Portuguese>Tubo utilizado</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Disposable_UsedTubeDescription">
|
||||
<English>Used disposable rocket launcher</English>
|
||||
@ -22,6 +23,7 @@
|
||||
<Hungarian>Elhasznált eldobható rakétavető</Hungarian>
|
||||
<Russian>Отстрелянная одноразовая пусковая установка</Russian>
|
||||
<Italian>Lanciarazzi monouso utilizzato</Italian>
|
||||
<Portuguese>Lança foguetes descartável utilizado</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Disposable_PreloadedMissileDummy">
|
||||
<English>Preloaded Missile Dummy</English>
|
||||
@ -33,6 +35,7 @@
|
||||
<Hungarian>Előtöltött műrakéta</Hungarian>
|
||||
<Russian>Предзаряженная ракетная болванка</Russian>
|
||||
<Italian>Missile stupido precaricato</Italian>
|
||||
<Portuguese>Míssel dummy pré-carregado</Portuguese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
8
addons/dragging/CfgMovesBasic.hpp
Normal file
8
addons/dragging/CfgMovesBasic.hpp
Normal file
@ -0,0 +1,8 @@
|
||||
class CfgMovesBasic {
|
||||
class Actions {
|
||||
class MoveWithInjuredManDragger;
|
||||
class MoveWithInjuredManDraggerRfl: MoveWithInjuredManDragger {
|
||||
Up = "amovpercmstpsraswrfldnon";
|
||||
};
|
||||
};
|
||||
};
|
@ -14,3 +14,4 @@ class CfgPatches {
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgMovesBasic.hpp"
|
||||
|
@ -7,7 +7,7 @@
|
||||
<Spanish>Arrastrar</Spanish>
|
||||
<Polish>Ciągnij</Polish>
|
||||
<Czech>Táhnout</Czech>
|
||||
<French>Tracter</French>
|
||||
<French>Trainer</French>
|
||||
<German>Ziehen</German>
|
||||
<Portuguese>Arrastar</Portuguese>
|
||||
<Italian>Trascina</Italian>
|
||||
@ -21,7 +21,7 @@
|
||||
<Czech>Položit</Czech>
|
||||
<French>Lâcher</French>
|
||||
<German>Loslassen</German>
|
||||
<Portuguese>Largar</Portuguese>
|
||||
<Portuguese>Soltar</Portuguese>
|
||||
<Italian>Lascia</Italian>
|
||||
<Hungarian>Elengedés</Hungarian>
|
||||
</Key>
|
||||
|
@ -37,7 +37,7 @@ player addEventHandler ["Killed", {
|
||||
} count _deadman;
|
||||
}];
|
||||
player addEventHandler ["Take", {
|
||||
private ["_item", "_getter", "_giver", "_config"];
|
||||
private ["_item", "_getter", "_giver", "_config", "_detonators"];
|
||||
_item = _this select 2;
|
||||
_getter = _this select 0;
|
||||
_giver = _this select 1;
|
||||
|
@ -17,7 +17,11 @@
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_4_PVT(_this,_unit,_explosive,_magazineClass,_extra);
|
||||
|
||||
private["_config", "_detonators", "_hasRequired", "_requiredItems", "_code", "_count", "_codeSet"];
|
||||
|
||||
// Config is the last item in the list of passed in items.
|
||||
_config = (_this select 3) select (count (_this select 3) - 1);
|
||||
|
||||
@ -29,7 +33,7 @@ _detonators = [_unit] call FUNC(getDetonators);
|
||||
_hasRequired = false;
|
||||
};
|
||||
} count _requiredItems;
|
||||
private ["_code", "_count", "_codeSet"];
|
||||
|
||||
_codeSet = false;
|
||||
while {!_codeSet} do {
|
||||
_code = str(round (random 9999));
|
||||
|
@ -17,7 +17,7 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_clacker", "_config", "_requiredItems", "_hasRequired"];
|
||||
private ["_clacker", "_config", "_requiredItems", "_hasRequired", "_detonators"];
|
||||
EXPLODE_3_PVT(_this,_unit,_explosive,_magazineClass);
|
||||
// Config is the last item in the list of passed in items.
|
||||
_config = (_this select 3) select (count (_this select 3) - 1);
|
||||
|
@ -15,7 +15,7 @@
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_result", "_item", "_children"];
|
||||
private ["_result", "_item", "_children", "_range", "_required"];
|
||||
|
||||
EXPLODE_2_PVT(_this,_unit,_detonator);
|
||||
_range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range");
|
||||
|
@ -11,7 +11,7 @@
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_mags", "_item", "_index", "_children"];
|
||||
private ["_mags", "_item", "_index", "_children", "_itemCount", "_list"];
|
||||
|
||||
EXPLODE_1_PVT(_this,_unit);
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_items", "_unit", "_children", "_config"];
|
||||
private ["_unit", "_children", "_config", "_detonators"];
|
||||
_unit = _this select 0;
|
||||
_detonators = [_unit] call FUNC(getDetonators);
|
||||
_children = [];
|
||||
|
@ -15,8 +15,7 @@
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_hasRequiredItems","_triggerTypes", "_children",
|
||||
"_detonators", "_required", "_magTriggers"];
|
||||
private ["_hasRequiredItems","_triggerTypes", "_children", "_detonators", "_required", "_magTriggers"];
|
||||
EXPLODE_2_PVT(_this,_magazine,_explosive);
|
||||
_detonators = [ACE_player] call FUNC(getDetonators);
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_specialist"];
|
||||
private ["_isSpecialist"];
|
||||
EXPLODE_2_PVT(_this,_unit,_target);
|
||||
if (isNull(_target getVariable [QGVAR(Explosive),objNull])) exitWith {
|
||||
deleteVehicle _target;
|
||||
|
@ -19,18 +19,18 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_result", "_ignoreRange", "_helper"];
|
||||
private ["_result", "_ignoreRange", "_helpers", "_pos"];
|
||||
EXPLODE_3_PVT(_this,_unit,_range,_item);
|
||||
_ignoreRange = (_range == -1);
|
||||
_result = true;
|
||||
|
||||
if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {false};
|
||||
|
||||
_helper = (attachedTo (_item select 0));
|
||||
if (!isNull(_helper)) then {
|
||||
detach (_item select 0);
|
||||
deleteVehicle _helper;
|
||||
};
|
||||
_helpers = attachedObjects (_item select 0);
|
||||
{
|
||||
detach _x;
|
||||
deleteVehicle _x;
|
||||
} forEach _helpers;
|
||||
|
||||
if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhenDestroyed") == 0) then {
|
||||
private ["_exp", "_previousExp"];
|
||||
@ -46,6 +46,7 @@ if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhe
|
||||
};
|
||||
};
|
||||
[{
|
||||
private ["_explosive"];
|
||||
_explosive = _this;
|
||||
if (!isNull _explosive) then {
|
||||
_explosive setDamage 1;
|
||||
|
@ -15,7 +15,7 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_arr", "_ran", "_i","_speedDial"];
|
||||
private ["_arr", "_ran", "_i"];
|
||||
EXPLODE_2_PVT(_this,_unit,_code);
|
||||
if (_unit getVariable [QGVAR(Dialing),false]) exitWith {};
|
||||
if !(alive _unit) exitWith {};
|
||||
|
@ -14,6 +14,8 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
// IGNORE_PRIVATE_WARNING(_detonators);
|
||||
|
||||
private ["_unit", "_items", "_result", "_config"];
|
||||
_unit = _this select 0;
|
||||
_items = (items _unit);
|
||||
@ -21,7 +23,7 @@ _result = [];
|
||||
|
||||
{
|
||||
_config = ConfigFile >> "CfgWeapons" >> _x;
|
||||
if (getNumber (_config >> "ACE_Detonator") == 1) then {
|
||||
if (getNumber (_config >> "ACE_Detonator") == 1 && {!(_x in _result)}) then {
|
||||
_result pushBack _x;
|
||||
};
|
||||
} forEach _items;
|
||||
|
@ -16,6 +16,8 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
// IGNORE_PRIVATE_WARNING(_allExplosives,_deadmanExplosives);
|
||||
|
||||
private ["_unit", "_clackerList", "_adjustedList", "_list", "_filter"];
|
||||
_unit = _this select 0;
|
||||
_filter = nil;
|
||||
|
@ -14,6 +14,8 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
// IGNORE_PRIVATE_WARNING(_hasExplosives);
|
||||
|
||||
private ["_unit", "_result", "_magazines"];
|
||||
_result = false;
|
||||
_unit = _this select 0;
|
||||
|
@ -14,4 +14,6 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
// IGNORE_PRIVATE_WARNING(_hasPlacedExplosives);
|
||||
|
||||
(count (_this call FUNC(getPlacedExplosives)) > 0)
|
||||
|
@ -15,6 +15,9 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
if !(isServer) exitWith {};
|
||||
|
||||
private["_activated", "_logic"];
|
||||
|
||||
_logic = _this select 0;
|
||||
_activated = _this select 2;
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
/*
|
||||
* Author: Garth 'L-H' de Wet
|
||||
* Handles the "EpeContactStart" event when placing the explosive.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Explosive Placing Object <OBJECT>
|
||||
* 1: Colliding Object <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
@ -14,19 +17,23 @@
|
||||
#include "script_component.hpp"
|
||||
EXPLODE_2_PVT(_this,_explosive,_hitTarget);
|
||||
|
||||
TRACE_2("Explosive EpeContactStart",_explosive,_hitTarget);
|
||||
|
||||
if ((_explosive getVariable [QGVAR(Handled), false])) exitWith {};
|
||||
|
||||
_explosive setVariable [QGVAR(Handled), true];
|
||||
if (!isNull _hitTarget && {_hitTarget isKindOf "AllVehicles"}) then {
|
||||
TRACE_1("Attaching to",_hitTarget);
|
||||
_explosive attachTo [_hitTarget];
|
||||
private "_dir";
|
||||
_dir = _setup getVariable [QGVAR(Direction), 0];
|
||||
_dir = _explosive getVariable [QGVAR(Direction), 0];
|
||||
_dir = _dir - (getDir _hitTarget);
|
||||
[[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc);
|
||||
} else {
|
||||
[{
|
||||
EXPLODE_2_PVT(_this,_player,_explosive);
|
||||
private "_pos";
|
||||
_pos = getPosASL _explosive;
|
||||
if (surfaceIsWater _pos) then {
|
||||
_pos = getPosASL _explosive;
|
||||
_explosive setPosASL _pos;
|
||||
|
@ -21,10 +21,14 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private ["_ammo", "_explosive"];
|
||||
private ["_ammo", "_explosive", "_attachedTo", "_expPos", "_magazineTrigger"];
|
||||
EXPLODE_6_PVT(_this,_unit,_pos,_dir,_magazineClass,_triggerConfig,_triggerSpecificVars);
|
||||
if (count _this > 6) then {
|
||||
deleteVehicle (_this select 6);
|
||||
DEFAULT_PARAM(6,_setupPlaceholderObject,objNull);
|
||||
|
||||
_attachedTo = objNull;
|
||||
if (!isNull _setupPlaceholderObject) then {
|
||||
_attachedTo = attachedTo _setupPlaceholderObject;
|
||||
deleteVehicle _setupPlaceholderObject;
|
||||
};
|
||||
|
||||
if (isNil "_triggerConfig") exitWith {
|
||||
@ -57,6 +61,11 @@ _expPos = getPosATL _explosive;
|
||||
_defuseHelper setPosATL (((getPosATL _defuseHelper) vectorAdd (_pos vectorDiff _expPos)));
|
||||
_explosive setPosATL _pos;
|
||||
|
||||
if (!isNull _attachedTo) then {
|
||||
TRACE_1("Attaching Live Explosive",_attachedTo);
|
||||
_explosive attachTo [_attachedTo];
|
||||
};
|
||||
|
||||
if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars]
|
||||
call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive};
|
||||
[[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc);
|
||||
|
@ -19,7 +19,7 @@ if (GVAR(pfeh_running)) then {
|
||||
[QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler);
|
||||
GVAR(pfeh_running) = false;
|
||||
};
|
||||
private ["_mag", "_setup", "_player"];
|
||||
private ["_setup", "_player", "_dir"];
|
||||
_setup = GVAR(Setup);
|
||||
GVAR(Setup) = objNull;
|
||||
[GVAR(placer), "ACE_Explosives", false] call EFUNC(Common,setForceWalkStatus);
|
||||
|
@ -28,7 +28,7 @@ GVAR(Setup) setVariable [QGVAR(class), _class, true];
|
||||
GVAR(TweakedAngle) = 180;
|
||||
|
||||
[QGVAR(Placement),"OnEachFrame", {
|
||||
private "_player";
|
||||
private ["_player", "_pos"];
|
||||
_player = ACE_player;
|
||||
if (GVAR(placer) != _player) exitWith {
|
||||
call FUNC(place_Cancel);
|
||||
|
@ -16,11 +16,14 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
EXPLODE_2_PVT(_this,_unit,_target);
|
||||
|
||||
private["_actionToPlay"];
|
||||
|
||||
_target = attachedTo (_target);
|
||||
|
||||
_fnc_DefuseTime = {
|
||||
EXPLODE_2_PVT(_this,_specialist,_target);
|
||||
|
||||
private ["_defuseTime"];
|
||||
_defuseTime = 5;
|
||||
if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then {
|
||||
_defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime");
|
||||
|
@ -19,6 +19,7 @@
|
||||
EXPLODE_2_PVT(_this,_explosive,_delay);
|
||||
|
||||
[{
|
||||
private ["_explosive"];
|
||||
_explosive = _this;
|
||||
if (!isNull _explosive) then {
|
||||
[_explosive, -1, [_explosive, 0]] call FUNC(detonateExplosive);
|
||||
|
@ -14,7 +14,10 @@
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
private "_result";
|
||||
|
||||
private["_result", "_config", "_count", "_index", "_supports"];
|
||||
// IGNORE_PRIVATE_WARNING(_supports);
|
||||
|
||||
_result = [];
|
||||
_config = getArray (ConfigFile >> "CfgMagazines" >> (_this select 0) >> "ACE_Triggers" >> "SupportedTriggers");
|
||||
_count = count _config;
|
||||
|
@ -1,6 +1,8 @@
|
||||
#define COMPONENT explosives
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
// #define DEBUG_MODE_FULL
|
||||
|
||||
#ifdef DEBUG_ENABLED_EXPLOSIVES
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
@ -42,7 +42,7 @@
|
||||
<German>Sprengstoffcode: %1</German>
|
||||
<Spanish>Código del explosivo: %1</Spanish>
|
||||
<Polish>Kod ładunku: %1</Polish>
|
||||
<French>Code explosif: %1</French>
|
||||
<French>Code de l'explosif: %1</French>
|
||||
<Czech>Kód výbušniny: %1</Czech>
|
||||
<Hungarian>Robbanóanyag kódja: %1</Hungarian>
|
||||
<Portuguese>Código do explosivo: %1</Portuguese>
|
||||
@ -222,7 +222,7 @@
|
||||
<German>Löschen</German>
|
||||
<Spanish>Borrar</Spanish>
|
||||
<Polish>Usuń</Polish>
|
||||
<French>Désamorçé</French>
|
||||
<French>Effacer</French>
|
||||
<Czech>Čistý</Czech>
|
||||
<Italian>Libera</Italian>
|
||||
<Hungarian>Törlés</Hungarian>
|
||||
@ -477,7 +477,9 @@
|
||||
<Polish>Czuwak</Polish>
|
||||
<Spanish>Detonador de hombre muerto</Spanish>
|
||||
<Hungarian>Dead Man's Switch</Hungarian>
|
||||
<Portuguese>Detonador do homem morto</Portuguese>
|
||||
<Russian>Кнопка мертвеца</Russian>
|
||||
<Italian>Detonatore a rilascio</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_DeadManSwitch_description">
|
||||
<English>Used to remotely trigger explosives when released.</English>
|
||||
@ -486,9 +488,10 @@
|
||||
<Czech>Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny</Czech>
|
||||
<Polish>Używany w celu zdalnej detonacji ładunków, kiedy jego operator zostanie zabity.</Polish>
|
||||
<Spanish>Utilizado para detonar explosivos remotamente al soltarlo.</Spanish>
|
||||
<Hungarian>Robbanóanyagok távoli robbantásához való, elengedéskor gyújt.</Hungarian>
|
||||
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
|
||||
<Portuguese>Usado para detonar remotamente o explosivo quando solto.</Portuguese>
|
||||
<Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian>
|
||||
<Italian>Usato per attivare esplosivi quando rilasciato</Italian>
|
||||
<Italian>Usato per attivare esplosivi al momento del rilascio</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_Pickup">
|
||||
<English>Pick up</English>
|
||||
@ -500,6 +503,7 @@
|
||||
<Hungarian>Felszedés</Hungarian>
|
||||
<Russian>Поднять</Russian>
|
||||
<Italian>Raccogli</Italian>
|
||||
<Portuguese>Pegar</Portuguese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -10,6 +10,8 @@
|
||||
<Spanish>Iluminar objetivo / Medir distancia</Spanish>
|
||||
<Russian>Подсветить цель / Замерить расстояние</Russian>
|
||||
<Hungarian>Célpont lézerezése / Távolság Bemérése</Hungarian>
|
||||
<Italian>Misura la distanza</Italian>
|
||||
<Portuguese>Marcar com laser / Medir Distância</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_ZeroedTo">
|
||||
<English>Zeroed To</English>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="FlashSuppressors">
|
||||
<Key ID="STR_ACE_muzzle_mzls_H">
|
||||
|
8
addons/frag/ACE_Settings.hpp
Normal file
8
addons/frag/ACE_Settings.hpp
Normal file
@ -0,0 +1,8 @@
|
||||
class ACE_Settings {
|
||||
class GVAR(enabled) {
|
||||
displayName = "Frag System";
|
||||
description = "Enables the shrapnel system for explosives";
|
||||
typeName = "BOOL";
|
||||
value = 1;
|
||||
};
|
||||
};
|
@ -6,15 +6,15 @@ class CfgAmmo {
|
||||
//class ace_arty_105mm_m1_m782_time;
|
||||
//class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {};
|
||||
//class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
// GVAR(skip) = 1;
|
||||
//};
|
||||
class Bo_GBU12_LGB;
|
||||
class Nou_GBU12 : Bo_GBU12_LGB {
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
ACE_FRAG_METAL = 140000;
|
||||
ACE_FRAG_CHARGE = 87000;
|
||||
ACE_FRAG_GURNEY_C = 2320;
|
||||
ACE_FRAG_GURNEY_K = 1/2;
|
||||
class ACE_GBU12 : Bo_GBU12_LGB {
|
||||
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
GVAR(metal) = 140000;
|
||||
GVAR(charge) = 87000;
|
||||
GVAR(gurney_c) = 2320;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
sideAirFriction = 0.04;
|
||||
airFriction = 0.04;
|
||||
laserLock = 0;
|
||||
@ -23,91 +23,172 @@ class CfgAmmo {
|
||||
class GrenadeBase;
|
||||
class Grenade;
|
||||
class GrenadeHand: Grenade {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
GVAR(skip) = 0;
|
||||
GVAR(force) = 1;
|
||||
// This is a good high-drag frag type for grenades.
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
|
||||
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||
/*
|
||||
These values are based on the M67 Grenade, should be tweaked for
|
||||
individual grenades.
|
||||
*/
|
||||
ACE_FRAG_METAL = 210; // metal in grams
|
||||
ACE_FRAG_CHARGE = 185; // explosive in grams
|
||||
ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
GVAR(metal) = 210; // metal in grams
|
||||
GVAR(charge) = 185; // explosive in grams
|
||||
GVAR(gurney_c) = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
GVAR(gurney_k) = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||
};
|
||||
class GrenadeHand_stone: GrenadeHand {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
GVAR(skip) = 1;
|
||||
};
|
||||
class SmokeShell: GrenadeHand {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
GVAR(skip) = 1;
|
||||
};
|
||||
|
||||
class RocketBase;
|
||||
//class R_Hydra_HE: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
//};
|
||||
|
||||
class R_Hydra_HE: RocketBase {
|
||||
// Source: http://fas.org/man/dod-101/sys/missile/hydra-70.htm
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 3850;
|
||||
GVAR(charge) = 1040;
|
||||
GVAR(gurney_c) = 2700;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
//class R_57mm_HE: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
// GVAR(skip) = 1;
|
||||
//};
|
||||
|
||||
class R_80mm_HE: RocketBase {
|
||||
ACE_FRAG_SKIP = 1;
|
||||
GVAR(skip) = 1;
|
||||
};
|
||||
|
||||
//class R_S8T_AT: RocketBase {
|
||||
// ACE_FRAG_SKIP = 1;
|
||||
// GVAR(skip) = 1;
|
||||
//};
|
||||
|
||||
class BombCore;
|
||||
class Bo_Mk82: BombCore {
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
ACE_FRAG_METAL = 140000;
|
||||
ACE_FRAG_CHARGE = 87000;
|
||||
ACE_FRAG_GURNEY_C = 2320;
|
||||
ACE_FRAG_GURNEY_K = 1/2;
|
||||
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
GVAR(metal) = 140000;
|
||||
GVAR(charge) = 87000;
|
||||
GVAR(gurney_c) = 2320;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
|
||||
|
||||
class G_40mm_HEDP: GrenadeBase {
|
||||
// Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M433
|
||||
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||
GVAR(metal) = 200;
|
||||
GVAR(charge) = 45;
|
||||
GVAR(gurney_c) = 2830;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class G_40mm_HE: GrenadeBase {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
// Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M441
|
||||
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||
GVAR(metal) = 200;
|
||||
GVAR(charge) = 32;
|
||||
GVAR(gurney_c) = 2700;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
|
||||
class ACE_G_40mm_HEDP: G_40mm_HE {
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
|
||||
ACE_FRAG_METAL = 200;
|
||||
ACE_FRAG_CHARGE = 45;
|
||||
ACE_FRAG_GURNEY_C = 2830;
|
||||
ACE_FRAG_GURNEY_K = 3/5;
|
||||
class ACE_G_40mm_HEDP: G_40mm_HEDP {
|
||||
};
|
||||
class ACE_G_40mm_HE: ACE_G_40mm_HEDP {
|
||||
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
|
||||
ACE_FRAG_METAL = 200;
|
||||
ACE_FRAG_CHARGE = 32;
|
||||
ACE_FRAG_GURNEY_C = 2700;
|
||||
ACE_FRAG_GURNEY_K = 3/5;
|
||||
class ACE_G_40mm_HE: 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 {
|
||||
ACE_FRAG_SKIP = 0;
|
||||
ACE_FRAG_FORCE = 1;
|
||||
GVAR(skip) = 0;
|
||||
GVAR(force) = 1;
|
||||
};
|
||||
|
||||
// curator ammo entries
|
||||
class ShellBase;
|
||||
class Sh_125mm_HEAT;
|
||||
class Sh_82mm_AMOS : ShellBase {
|
||||
// Source: http://www.arsenal-bg.com/defense_police/mortar_bombs_82mm.htm
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 3200;
|
||||
GVAR(charge) = 420;
|
||||
GVAR(gurney_c) = 2440;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
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_105mm_HEAT_MP : Sh_125mm_HEAT {
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 11400;
|
||||
GVAR(charge) = 7100;
|
||||
GVAR(gurney_c) = 2800;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class Sh_120mm_HE : ShellBase {
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 23000;
|
||||
GVAR(charge) = 3148;
|
||||
GVAR(gurney_c) = 2830;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class Sh_125mm_HE: Sh_120mm_HE {
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 16000;
|
||||
GVAR(charge) = 3200;
|
||||
GVAR(gurney_c) = 2440;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class Sh_155mm_AMOS: ShellBase {
|
||||
// Source: http://www.globalsecurity.org/military/systems/munitions/m795.htm
|
||||
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||
GVAR(metal) = 36000;
|
||||
GVAR(charge) = 9979;
|
||||
GVAR(gurney_c) = 2440;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
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_MEEWS_HEDP : R_SMAW_HEDP {
|
||||
// ACE_FRAG_FORCE = 1;
|
||||
// ACE_FRAG_MULTIPLIER = 1.2;
|
||||
// GVAR(force) = 1;
|
||||
// GVAR(multiplier) = 1.2;
|
||||
//};
|
||||
|
||||
//class MissileBase;
|
||||
//class M_Hellfire_AT: MissileBase {
|
||||
// ACE_FRAG_FORCE = 1;
|
||||
// ACE_FRAG_MULTIPLIER = 1.75;
|
||||
//};
|
||||
class MissileBase;
|
||||
class Missile_AGM_02_F : MissileBase {
|
||||
// Source: http://fas.org/man/dod-101/sys/smart/agm-65.htm
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 56250;
|
||||
GVAR(charge) = 39000;
|
||||
GVAR(gurney_c) = 2700;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class M_Hellfire_AT: MissileBase {
|
||||
// Source: http://www.designation-systems.net/dusrm/m-114.html
|
||||
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||
GVAR(metal) = 8000;
|
||||
GVAR(charge) = 2400;
|
||||
GVAR(gurney_c) = 2700;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
|
||||
/*
|
||||
class B_762x51_Ball;
|
||||
|
@ -1,12 +1,12 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_pre_init));
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_post_init));
|
||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||
};
|
||||
};
|
||||
|
||||
|
5
addons/frag/XEH_postInit.sqf
Normal file
5
addons/frag/XEH_postInit.sqf
Normal file
@ -0,0 +1,5 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
if(isServer) then {
|
||||
[QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler;
|
||||
};
|
@ -1,18 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
if(isServer) then {
|
||||
[QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler;
|
||||
};
|
||||
/*
|
||||
GVAR(replacedBisArtyWrapper) = false;
|
||||
[] spawn {
|
||||
waitUntil {
|
||||
if(!(isNil "BIS_ARTY_F_ShellFlight")) then {
|
||||
ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight;
|
||||
BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER);
|
||||
GVAR(replacedBisArtyWrapper) = true;
|
||||
};
|
||||
sleep 4;
|
||||
GVAR(replacedBisArtyWrapper)
|
||||
};
|
||||
};
|
||||
*/
|
@ -1,45 +1,35 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP(doSpall);
|
||||
PREP(fired);
|
||||
PREP(frago);
|
||||
PREP(trackFragRound);
|
||||
PREP(spallTrack);
|
||||
PREP(doSpall);
|
||||
PREP(vectorDiffFast);
|
||||
PREP(trackFragRound);
|
||||
|
||||
GVAR(trackedObjects) = [];
|
||||
GVAR(blackList) = [];
|
||||
GVAR(traceFrags) = false;
|
||||
|
||||
GVAR(replacedBisArtyWrapper) = true;
|
||||
GVAR(trackedObjects) = [];
|
||||
|
||||
GVAR(TOTALFRAGS) = 0;
|
||||
|
||||
GVAR(spallIsTrackingCount) = 0;
|
||||
GVAR(spallHPData) = [];
|
||||
GVAR(spallIsTrackingCount) = 0;
|
||||
|
||||
GVAR(autoTrace) = true;
|
||||
GVAR(traceID) = -1;
|
||||
GVAR(traces) = [];
|
||||
GVAR(tracesStarted) = false;
|
||||
GVAR(traceID) = -1;
|
||||
GVAR(autoTrace) = true;
|
||||
|
||||
|
||||
// * Other Shit */
|
||||
PREP(frag_trace);
|
||||
PREP(denyFrag);
|
||||
PREP(BIS_ARTY_WRAPPER);
|
||||
PREP(startTracing);
|
||||
PREP(stopTracing);
|
||||
PREP(clearTraces);
|
||||
PREP(trackTrace);
|
||||
PREP(addBlackList);
|
||||
PREP(addTrack);
|
||||
PREP(drawTraces);
|
||||
PREP(removeTrack);
|
||||
PREP(spallHP);
|
||||
PREP(addBlackList);
|
||||
PREP(addManualTrack);
|
||||
PREP(startTracing);
|
||||
PREP(stopTracing);
|
||||
PREP(trackTrace);
|
||||
|
||||
ADDON = true;
|
@ -10,7 +10,6 @@ class CfgPatches {
|
||||
};
|
||||
};
|
||||
|
||||
//PRELOAD_ADDONS;
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "CfgAmmo.hpp"
|
||||
#include "ACE_Settings.hpp"
|
@ -1,13 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
_ret = [(_this select 6)] call FUNC(removeTrack);
|
||||
if(!_ret) then {
|
||||
[(_this select 6)] call FUNC(addBlackList);
|
||||
};
|
||||
_this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight;
|
||||
_catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1);
|
||||
_shell = _catEntry select 0;
|
||||
_ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact");
|
||||
if(_ARTY_DeployOnImpact == "") then {
|
||||
_this set[6, _shell];
|
||||
_this call FUNC(fired);
|
||||
};
|
@ -1,7 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
private ["_round"];
|
||||
_round = _this select 0;
|
||||
if(alive _round) then {
|
||||
GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round];
|
||||
[DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler;
|
||||
};
|
@ -1,5 +1,8 @@
|
||||
#include "script_component.hpp"
|
||||
if(GVAR(autoTrace)) then {
|
||||
|
||||
private ["_color", "_data", "_index", "_obj", "_objSpd", "_origin", "_positions"];
|
||||
|
||||
if (GVAR(autoTrace)) then {
|
||||
[] call FUNC(startTracing);
|
||||
};
|
||||
|
||||
@ -12,9 +15,9 @@ if((count _this) > 2) then {
|
||||
_color = _this select 2;
|
||||
};
|
||||
_positions = [];
|
||||
_objVel = velocity _obj;
|
||||
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
|
||||
_positions set[(count _positions), [(getPos _obj), _objTVel]];
|
||||
_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color];
|
||||
_objSpd = vectorMagnitude (velocity _obj);
|
||||
_positions set[(count _positions), [(getPos _obj), _objSpd]];
|
||||
_data = [_origin, typeOf _origin, typeOf _obj, _objSpd, _positions, _color];
|
||||
|
||||
GVAR(traces) set[_index, _data];
|
||||
[DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler;
|
@ -1,2 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
GVAR(traces) = [];
|
@ -1,7 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_ret"];
|
||||
_ret = [(_this select 0)] call FUNC(removeTrack);
|
||||
if(!_ret) then {
|
||||
[(_this select 0)] call FUNC(addBlackList);
|
||||
};
|
@ -3,13 +3,12 @@
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
// player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
||||
// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
||||
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
|
||||
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
|
||||
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
|
||||
"_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect",
|
||||
"_fragment"];
|
||||
|
||||
"_fragment", "_index", "_hitData", "_fragTypes", "_fragType", "_foundObjects"];
|
||||
|
||||
_params = _this select 0;
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
@ -40,21 +39,21 @@ if(!alive _round && (_initialData select 6) == 1) then {
|
||||
};
|
||||
|
||||
if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||
// player sideChat format["BBBB"];
|
||||
// ACE_player sideChat format["BBBB"];
|
||||
_exit = false;
|
||||
_vm = 1;
|
||||
_velocity = _initialData select 5;
|
||||
|
||||
_oldVelocity = _velocity call BIS_fnc_magnitude;
|
||||
_curVelocity = (velocity _round) call BIS_fnc_magnitude;
|
||||
_oldVelocity = vectorMagnitude _velocity;
|
||||
_curVelocity = vectorMagnitude (velocity _round);
|
||||
|
||||
if(alive _round) then {
|
||||
_diff = _velocity vectorDiff (velocity _round);
|
||||
_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(_caliber < 2.5) then {
|
||||
// player sideChat format["exit!"];
|
||||
// ACE_player sideChat format["exit!"];
|
||||
_exit = true;
|
||||
} else {
|
||||
_vm = 1-(_curVelocity/_oldVelocity);
|
||||
@ -66,16 +65,8 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||
_pos = _hpData select 3;
|
||||
_spallPos = nil;
|
||||
for "_i" from 0 to 100 do {
|
||||
_pos1 = [
|
||||
(_pos select 0) + (((_unitDir select 0)*0.01)*_i),
|
||||
(_pos select 1) + (((_unitDir select 1)*0.01)*_i),
|
||||
(_pos select 2) + (((_unitDir select 2)*0.01)*_i)
|
||||
];
|
||||
_pos2 = [
|
||||
(_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)),
|
||||
(_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)),
|
||||
(_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1))
|
||||
];
|
||||
_pos1 = _pos vectorAdd (_unitDir vectorMultiply (0.01 * _i));
|
||||
_pos2 = _pos vectorAdd (_unitDir vectorMultiply (0.01 * (_i + 1)));
|
||||
// _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)];
|
||||
// diag_log text format["b: %1", _blah];
|
||||
|
||||
@ -83,7 +74,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||
// NOU_TRACES set[(count NOU_TRACES), _data];
|
||||
|
||||
if(!lineIntersects [_pos1, _pos2]) exitWith {
|
||||
// player sideChat format["FOUND!"];
|
||||
// ACE_player sideChat format["FOUND!"];
|
||||
_spallPos = _pos2;
|
||||
};
|
||||
};
|
||||
@ -91,7 +82,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||
_spallPolar = _velocity call CBA_fnc_vect2polar;
|
||||
|
||||
if(_explosive > 0) then {
|
||||
// player sideChat format["EXPLOSIVE!"];
|
||||
// ACE_player sideChat format["EXPLOSIVE!"];
|
||||
_warn = false;
|
||||
_c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE");
|
||||
if(_c == 0) then { _c = 1; _warn = true;};
|
||||
@ -137,7 +128,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||
_fragment setPosASL _spallPos;
|
||||
_fragment setVelocity _spallFragVect;
|
||||
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);
|
||||
@ -158,7 +149,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||
_fragment setPosASL _spallPos;
|
||||
_fragment setVelocity _spallFragVect;
|
||||
if(GVAR(traceFrags)) then {
|
||||
[player, _fragment, [1,0,0,1]] call FUNC(addTrack);
|
||||
[ACE_player, _fragment, [1,0,0,1]] call FUNC(addTrack);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -1,13 +1,13 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_color", "_index", "_lastPos", "_lastSpd", "_max", "_positions", "_startSpeed"];
|
||||
|
||||
{
|
||||
_positions = _x select 4;
|
||||
_color = _x select 5;
|
||||
_index = 0;
|
||||
_max = count _positions;
|
||||
_startSpeed = (_positions select 0) select 1;
|
||||
if(_startSpeed <= 0) then {
|
||||
_startSpeed = 0.01;
|
||||
};
|
||||
_startSpeed = 0.01 max ((_positions select 0) select 1);
|
||||
_lastSpd = [];
|
||||
_lastPos = [];
|
||||
while {_index < _max} do {
|
||||
|
@ -1,6 +1,8 @@
|
||||
#include "script_component.hpp"
|
||||
private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall"];
|
||||
if !(isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {};
|
||||
|
||||
private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall", "_spallTrack", "_spallTrackID"];
|
||||
|
||||
if (!GVAR(enabled)) exitWith {};
|
||||
|
||||
_gun = _this select 0;
|
||||
_type = _this select 4;
|
||||
@ -11,10 +13,10 @@ if(_round in GVAR(blackList)) exitWith {
|
||||
};
|
||||
|
||||
_doFragTrack = false;
|
||||
if(_gun == player) then {
|
||||
if(_gun == ACE_player) then {
|
||||
_doFragTrack = true;
|
||||
} else {
|
||||
if((gunner _gun) == player) then {
|
||||
if((gunner _gun) == ACE_player) then {
|
||||
_doFragTrack = true;
|
||||
} else {
|
||||
if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then {
|
||||
@ -28,14 +30,18 @@ if(_doSpall) then {
|
||||
GVAR(spallHPData) = [];
|
||||
};
|
||||
if(GVAR(spallIsTrackingCount) > 5) then {
|
||||
// player sideChat "LIMT!";
|
||||
// ACE_player sideChat "LIMT!";
|
||||
_doSpall = false;
|
||||
} else {
|
||||
GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1;
|
||||
};
|
||||
};
|
||||
// player sideChat format["c: %1", GVAR(spallIsTrackingCount)];
|
||||
[player, _round, [1,0,0,1]] call nou_fnc_addTrack;
|
||||
// ACE_player sideChat format["c: %1", GVAR(spallIsTrackingCount)];
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
[ACE_player, _round, [1,0,0,1]] call FUNC(addTrack);
|
||||
#endif
|
||||
|
||||
if(_doFragTrack && alive _round) then {
|
||||
GVAR(trackedObjects) pushBack _round;
|
||||
_spallTrack = [];
|
||||
@ -44,5 +50,5 @@ if(_doFragTrack && alive _round) then {
|
||||
if(_doSpall) then {
|
||||
[_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack);
|
||||
};
|
||||
// player sideChat "WTF2";
|
||||
// ACE_player sideChat "WTF2";
|
||||
};
|
||||
|
@ -1,10 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_params", "_shell"];
|
||||
_params = _this select 0;
|
||||
_shell = _params select 0;
|
||||
if(alive _shell) then {
|
||||
drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""];
|
||||
} else {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
};
|
@ -14,7 +14,7 @@ private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "
|
||||
"_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox",
|
||||
"_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir",
|
||||
"_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount",
|
||||
"_sectorSize", "_sectorOffset", "_randomDir"];
|
||||
"_sectorSize", "_sectorOffset", "_randomDir", "_endTime"];
|
||||
|
||||
|
||||
_round = _this select 0;
|
||||
@ -108,8 +108,8 @@ _fragArcs = [];
|
||||
_fragArcs set[360, 0];
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
player sideChat format["_fragRange: %1", _fragRange];
|
||||
player sideChat format["_objects: %1", _objects];
|
||||
ACE_player sideChat format["_fragRange: %1", _fragRange];
|
||||
ACE_player sideChat format["_objects: %1", _objects];
|
||||
#endif
|
||||
_doRandom = false;
|
||||
if(_isArmed && (count _objects) > 0) then {
|
||||
@ -159,11 +159,7 @@ if(_isArmed && (count _objects) > 0) then {
|
||||
_vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)];
|
||||
|
||||
_fp = (_fragPower-(random (_fragPowerRandom)));
|
||||
_vel = [
|
||||
(_vec select 0)*_fp,
|
||||
(_vec select 1)*_fp,
|
||||
(_vec select 2)*_fp
|
||||
];
|
||||
_vel = _vec vectorMultiply _fp;
|
||||
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
@ -176,7 +172,7 @@ if(_isArmed && (count _objects) > 0) then {
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
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;
|
||||
_currentCount = _currentCount + 1;
|
||||
@ -201,11 +197,7 @@ if(_isArmed && (count _objects) > 0) then {
|
||||
|
||||
_fp = (_fragPower-(random (_fragPowerRandom)));
|
||||
|
||||
_vel = [
|
||||
(_vec select 0)*_fp,
|
||||
(_vec select 1)*_fp,
|
||||
(_vec select 2)*_fp
|
||||
];
|
||||
_vel = _vec vectorMultiply _fp;
|
||||
|
||||
_fragType = round (random ((count _fragTypes)-1));
|
||||
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
@ -217,14 +209,14 @@ if(_isArmed && (count _objects) > 0) then {
|
||||
GVAR(traceFrags) = true;
|
||||
#endif
|
||||
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;
|
||||
};
|
||||
};
|
||||
};
|
||||
// #ifdef DEBUG_MODE_FULL
|
||||
// player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
|
||||
// player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
|
||||
// ACE_player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
|
||||
// ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
|
||||
// #endif
|
||||
// _endTime = diag_tickTime;
|
||||
|
@ -1,15 +1,15 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"];
|
||||
private ["_initialData", "_hpData", "_round", "_hpRound", "_hpDirect"];
|
||||
//player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))];
|
||||
if((_this select 0) <= (count GVAR(spallHPData))) then {
|
||||
|
||||
if ((_this select 0) <= (count GVAR(spallHPData))) then {
|
||||
_initialData = GVAR(spallHPData) select (_this select 0);
|
||||
if(!isNil "_initialData") then {
|
||||
if (!isNil "_initialData") then {
|
||||
_hpRound = ((_this select 1) select 0) select 2;
|
||||
_round = _initialData select 3;
|
||||
_hpDirect = ((_this select 1) select 0) select 10;
|
||||
if(_hpDirect && {_round == _hpRound}) then {
|
||||
|
||||
if (_hpDirect && {_round == _hpRound}) then {
|
||||
{
|
||||
_hpData = _x;
|
||||
_round = _initialData select 3;
|
||||
|
@ -1,30 +1,22 @@
|
||||
//fnc_spallTrack.sqf
|
||||
#include "script_component.hpp"
|
||||
private ["_params", "_round", "_multiplier", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_i", "_test", "_hpId", "_data"];
|
||||
// setAccTime 0;
|
||||
|
||||
private ["_round", "_multiplier", "_foundObjects", "_foundObjectHPIds", "_delta", "_curPos", "_velocity", "_velocityStep", "_forwardPos", "_intersectsWith", "_index", "_hpId", "_data"];
|
||||
_round = _this select 0;
|
||||
_multiplier = _this select 1;
|
||||
_foundObjects = _this select 2;
|
||||
_foundObjectHPIds = _this select 3;
|
||||
|
||||
_delta = (1/diag_fps)*_multiplier;
|
||||
_delta = (1/diag_fps) * _multiplier;
|
||||
_curPos = getPosASL _round;
|
||||
_velocity = velocity _round;
|
||||
|
||||
_velocityStep = [
|
||||
(_velocity select 0)*_delta,
|
||||
(_velocity select 1)*_delta,
|
||||
(_velocity select 2)*_delta
|
||||
];
|
||||
_forwardPos = [
|
||||
(_curPos select 0) + (_velocityStep select 0),
|
||||
(_curPos select 1) + (_velocityStep select 1),
|
||||
(_curPos select 2) + (_velocityStep select 2)
|
||||
];
|
||||
_velocityStep = _velocity vectorMultiply _delta;
|
||||
_forwardPos = _curPos vectorAdd _velocityStep;
|
||||
|
||||
_intersectsWith = lineIntersectsWith [_curPos, _forwardPos];
|
||||
|
||||
if(count _intersectsWith > 0) then {
|
||||
if (count _intersectsWith > 0) then {
|
||||
// player sideChat format["inter: %1", _intersectsWith];
|
||||
{
|
||||
if(!(_x in _foundObjects)) then {
|
||||
|
@ -1,6 +1,6 @@
|
||||
//fnc_trackFragRound.sqf
|
||||
#include "script_component.hpp"
|
||||
private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"];
|
||||
private ["_params", "_round", "_lastPos", "_lastVel", "_type", "_time", "_doSpall", "_spallTrack", "_foundObjectHPIds", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"];
|
||||
_params = _this select 0;
|
||||
_round = _params select 0;
|
||||
_lastPos = _params select 1;
|
||||
@ -15,11 +15,11 @@ if (!alive _round) then {
|
||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
|
||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
||||
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP");
|
||||
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(skip));
|
||||
if(_skip == 0) then {
|
||||
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
|
||||
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
|
||||
_force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE");
|
||||
_force = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(force));
|
||||
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
|
||||
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
|
||||
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;
|
||||
|
@ -1,14 +1,14 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_params", "_tracerObj", "_index", "_positions", "_data"];
|
||||
_params = _this select 0;
|
||||
_tracerObj = _params select 0;
|
||||
_index = _params select 1;
|
||||
|
||||
if(alive _tracerObj && (count GVAR(traces)) > 0) then {
|
||||
if (alive _tracerObj && (count GVAR(traces)) > 0) then {
|
||||
_data = GVAR(traces) select _index;
|
||||
_positions = _data select 4;
|
||||
_objVel = velocity _tracerObj;
|
||||
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
|
||||
_positions set[(count _positions), [(getPos _tracerObj), _objTVel]];
|
||||
_positions set[(count _positions), [(getPos _tracerObj), vectorMagnitude (velocity _tracerObj)]];
|
||||
} else {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
};
|
@ -1,15 +0,0 @@
|
||||
#include "script_component.hpp"
|
||||
private["_p1","_p2","_return"];
|
||||
|
||||
_p1 = _this select 0;
|
||||
_p2 = _this select 1;
|
||||
|
||||
if ((count _p1) != (count _p2)) then {textLogFormat ["BIS_FNC Error: vectors not of same size"]};
|
||||
|
||||
_return = [];
|
||||
|
||||
{
|
||||
_return set[_forEachIndex, (_p2 select _forEachIndex) - _x];
|
||||
} forEach _p1;
|
||||
|
||||
_return
|
@ -11,6 +11,7 @@
|
||||
<French>Désactive la fragmentation</French>
|
||||
<Hungarian>Repeszek letiltása</Hungarian>
|
||||
<Italian>Disattiva la frammentazione</Italian>
|
||||
<Portuguese>Disabilitar Fragmentação</Portuguese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="Goggles">
|
||||
<Key ID="STR_ACE_Goggles_ShowInThirdPerson">
|
||||
|
@ -82,7 +82,7 @@ class CfgAmmo {
|
||||
SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100};
|
||||
SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70};
|
||||
SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70};
|
||||
timeToLive = 60;
|
||||
timeToLive = 6;
|
||||
fuseDistance = 2.3;
|
||||
model = PATHTOF(models\ACE_m84_thrown.p3d);
|
||||
};
|
||||
|
@ -56,7 +56,7 @@ _affected = _grenade nearEntities ["CAManBase", 20];
|
||||
};
|
||||
} forEach [[0,0,0], [0,0,0.2], [0.1, 0.1, 0.1], [-0.1, -0.1, 0.1]];
|
||||
TRACE_1("Line of sight count (out of 4)",_losCount);
|
||||
if (_losCount == 0) then {
|
||||
if (_losCount <= 1) then {
|
||||
_strength = _strength / 10;
|
||||
};
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="Grenades">
|
||||
<Key ID="STR_ACE_Grenades_SwitchGrenadeMode">
|
||||
@ -96,7 +95,7 @@
|
||||
<Russian>XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий.</Russian>
|
||||
<Hungarian>Villanógránát néven is ismert. Azonnali villanási vakságot, süketséget, fülzúgást, és belső füli zavart okoz.</Hungarian>
|
||||
<Italian>Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano.</Italian>
|
||||
<Portuguese>Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça.</Portuguese>
|
||||
<Portuguese>Também conhecida como flashbang. Causa uma clarão imediato, cegueira, surdez, zumbido e distúrbio no tímpano.</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Grenades_M127A1_White_Name">
|
||||
<English>M127A1 Hand Held Signal (White)</English>
|
||||
@ -153,7 +152,7 @@
|
||||
<Hungarian>Kézi jelzőrakéta, Fehér színű</Hungarian>
|
||||
<Italian>Bengala (Bianco)</Italian>
|
||||
<Polish>Flara ręczna (biała)</Polish>
|
||||
<Portuguese>Sinalizador (Branco)</Portuguese>
|
||||
<Portuguese>Sinalizador de Mão (Branco)</Portuguese>
|
||||
<Russian>Фальшфейер (Белый)</Russian>
|
||||
<Spanish>Bengala (Blanca)</Spanish>
|
||||
<French>Feux à main (Blanc)</French>
|
||||
@ -165,7 +164,7 @@
|
||||
<Hungarian>Kézi jelzőrakéta, Piros színű</Hungarian>
|
||||
<Italian>Bengala (Rosso)</Italian>
|
||||
<Polish>Flara ręczna (czerwona)</Polish>
|
||||
<Portuguese>Sinalizador (Vermelho)</Portuguese>
|
||||
<Portuguese>Sinalizador de Mão (Vermelho)</Portuguese>
|
||||
<Russian>Фальшфейер (Красный)</Russian>
|
||||
<Spanish>Bengala (Roja)</Spanish>
|
||||
<French>Feux à main (Rouge)</French>
|
||||
@ -177,7 +176,7 @@
|
||||
<Hungarian>Kézi jelzőrakéta, Zöld színű</Hungarian>
|
||||
<Italian>Bengala (Verde)</Italian>
|
||||
<Polish>Flara ręczna (zielona)</Polish>
|
||||
<Portuguese>Sinalizador (Verde)</Portuguese>
|
||||
<Portuguese>Sinalizador de Mão (Verde)</Portuguese>
|
||||
<Russian>Фальшфейер (Зелёный)</Russian>
|
||||
<Spanish>Bengala (Verde)</Spanish>
|
||||
<French>Feux à main (Vert)</French>
|
||||
@ -189,7 +188,7 @@
|
||||
<Hungarian>Kézi jelzőrakéta, Sárga színű</Hungarian>
|
||||
<Italian>Bengala (Giallo)</Italian>
|
||||
<Polish>Flara ręczna (żółta)</Polish>
|
||||
<Portuguese>Sinalizador (Amarelo)</Portuguese>
|
||||
<Portuguese>Sinalizador de Mão (Amarelo)</Portuguese>
|
||||
<Russian>Фальшфейер (Жёлтые)</Russian>
|
||||
<Spanish>Bengala (Amarilla)</Spanish>
|
||||
<French>Feux à main (Jaune)</French>
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit) );
|
||||
@ -20,9 +19,9 @@ class Extended_Init_EventHandlers {
|
||||
};
|
||||
|
||||
class Extended_FiredNear_EventHandlers {
|
||||
class CAManBase {
|
||||
class AllVehicles {
|
||||
class GVAR(FiredNear) {
|
||||
clientFiredNear = QUOTE( if (GVAR(enableCombatDeafness) && {_this select 0 == ACE_player}) then {_this call FUNC(firedNear)}; );
|
||||
clientFiredNear = QUOTE(_this call FUNC(firedNear););
|
||||
};
|
||||
};
|
||||
};
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user