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
|
texHeaders.bin
|
||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
|
*.biprivatekey
|
||||||
|
11
AUTHORS.txt
11
AUTHORS.txt
@ -17,7 +17,7 @@ Janus
|
|||||||
Kieran
|
Kieran
|
||||||
NouberNou
|
NouberNou
|
||||||
PabstMirror <pabstmirror@gmail.com>
|
PabstMirror <pabstmirror@gmail.com>
|
||||||
Ruthberg
|
Ruthberg <ulteq@web.de>
|
||||||
tpM
|
tpM
|
||||||
ViperMaul
|
ViperMaul
|
||||||
VKing <kauestad@gmail.com>
|
VKing <kauestad@gmail.com>
|
||||||
@ -30,9 +30,11 @@ ACCtomeek <tomeek99@gmail.com>
|
|||||||
Adanteh
|
Adanteh
|
||||||
aeroson
|
aeroson
|
||||||
Aggr094 <bastards4glory@gmail.com>
|
Aggr094 <bastards4glory@gmail.com>
|
||||||
|
Alganthe <alganthe@live.fr>
|
||||||
Anthariel <Contact@storm-simulation.com>
|
Anthariel <Contact@storm-simulation.com>
|
||||||
BlackQwar
|
BlackQwar
|
||||||
Brakoviejo
|
Brakoviejo
|
||||||
|
Brisse <brisse@outlook.com>
|
||||||
Clon1998 <ps.patti1998@gmail.com>
|
Clon1998 <ps.patti1998@gmail.com>
|
||||||
Codingboy
|
Codingboy
|
||||||
Crusty
|
Crusty
|
||||||
@ -41,13 +43,14 @@ evromalarkey <evromalarkey@gmail.com>
|
|||||||
Falke75
|
Falke75
|
||||||
Ferenczi
|
Ferenczi
|
||||||
Ferenzi
|
Ferenzi
|
||||||
Filip Basara <filip.basara93@googlemail.com> (Logo)
|
Filip Basara <filip.basara93@googlemail.com>
|
||||||
FreeZbe <freeseb@gmail.com>
|
FreeZbe <freeseb@gmail.com>
|
||||||
geraldbolso1899
|
geraldbolso1899
|
||||||
Ghost
|
Ghost
|
||||||
GieNkoV <gienkov.grzegorz@gmail.com>
|
GieNkoV <gienkov.grzegorz@gmail.com>
|
||||||
gpgpgpgp
|
gpgpgpgp
|
||||||
Grzegorz
|
Grzegorz
|
||||||
|
Gianmarco Varriale (TeamNuke) <admin@forhost.org>
|
||||||
Hamburger SV
|
Hamburger SV
|
||||||
Harakhti <shadowdragonphd@gmail.com>
|
Harakhti <shadowdragonphd@gmail.com>
|
||||||
havena <silveredenis@gmail.com>
|
havena <silveredenis@gmail.com>
|
||||||
@ -69,7 +72,7 @@ Raspu86
|
|||||||
Riccardo Petricca <petriccarcc@gmail.com>
|
Riccardo Petricca <petriccarcc@gmail.com>
|
||||||
Robert Boklahánics <bokirobi@gmail.com>
|
Robert Boklahánics <bokirobi@gmail.com>
|
||||||
ramius86 <pasini86@hotmail.com>
|
ramius86 <pasini86@hotmail.com>
|
||||||
simon84
|
simon84 <badguy360th@gmail.com>
|
||||||
Sniperwolf572 <tenga6@gmail.com>
|
Sniperwolf572 <tenga6@gmail.com>
|
||||||
Tachi <zaveruha007@gmail.com>
|
Tachi <zaveruha007@gmail.com>
|
||||||
Tonic
|
Tonic
|
||||||
@ -83,3 +86,5 @@ Asgar Serran <piechottaf@web.de>
|
|||||||
Kavinsky <nmunozfernandez@gmail.com>
|
Kavinsky <nmunozfernandez@gmail.com>
|
||||||
Coren <coren4@gmail.com>
|
Coren <coren4@gmail.com>
|
||||||
OnkelDisMaster <onkeldismaster@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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
89
README.md
89
README.md
@ -1,48 +1,83 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg" height="80" />
|
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg"
|
||||||
|
height="112">
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/acemod/ACE3/releases">
|
<a href="https://github.com/acemod/ACE3/releases">
|
||||||
<img src="http://img.shields.io/badge/release-3.0-green.svg?style=flat" alt="ACE version">
|
<img src="http://img.shields.io/badge/Version-3.0.0-blue.svg?style=flat"
|
||||||
|
alt="ACE version">
|
||||||
</a>
|
</a>
|
||||||
<a href="#">
|
<a href="https://github.com/acemod/ACE3/archive/master.zip">
|
||||||
<img src="http://img.shields.io/badge/download-22_MB-blue.svg?style=flat" alt="ACE download">
|
<img src="http://img.shields.io/badge/Download-48.3_MB-green.svg?style=flat"
|
||||||
|
alt="ACE download">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/acemod/ACE3/issues">
|
<a href="https://github.com/acemod/ACE3/issues">
|
||||||
<img src="http://img.shields.io/github/issues/acemod/ACE3.svg?style=flat" alt="ACE issues">
|
<img src="http://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat&label=Issues"
|
||||||
|
alt="ACE issues">
|
||||||
|
</a>
|
||||||
|
<a href="http://forums.bistudio.com/showthread.php?190433-ACE3-A-collaborative-merger-between-AGM-CSE-and-ACE&p=2910796&viewfull=1#post2910796">
|
||||||
|
<img src="https://img.shields.io/badge/BIF-Thread-lightgrey.svg?style=flat"
|
||||||
|
alt="BIF thread">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
|
||||||
<img src="http://img.shields.io/badge/license-GPLv2-red.svg?style=flat" alt="ACE license">
|
<img src="http://img.shields.io/badge/License-GPLv2-red.svg?style=flat"
|
||||||
|
alt="ACE license">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center"><sup><strong>Requires the latest version of <a href="http://www.armaholic.com/page.php?id=18767">CBA A3</a> | <a href="#">BIF thread</a></strong></sup></p>
|
<p align="center"><sup><strong>Requires the latest version of <a href="http://www.armaholic.com/page.php?id=18767">CBA A3</a>. Visit us on <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup></p>
|
||||||
|
|
||||||
**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3.
|
**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3.
|
||||||
|
|
||||||
This mod is entirely **open-source**, and everyone is free to propose changes or maintain their own, customized version as long as they make their changes open to the public in accordance with the GNU General Public License (for more information check the license file attached to this project).
|
The project is entirely **open-source** and all contributions are welcome. Feel free to maintain your own custom version, so long as the changes you make are open to the public in accordance with the GNU General Public License ([GPLv2](https://github.com/acemod/ACE3/blob/master/LICENSE)).
|
||||||
|
|
||||||
The mod is **built modularly** — almost any PBO can be removed, thus a team can maintain its own tailored version of ACE, which excludes a select number of components that they don't like, or which conflict with other add-ons. Components themselves, like e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience.
|
The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE by simply excluding any components they don't need, or those possibly in conflict with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience.
|
||||||
|
|
||||||
### Features
|
### Core features
|
||||||
* Improved medical system
|
* Brand new 3D interaction/action system
|
||||||
* Logistics system including cargo transport and vehicle maintenance
|
* Performance and reliability framework
|
||||||
* Explosives system including different trigger types
|
* Focus on modularity and customization
|
||||||
* Captivity system
|
* New flexible client and server settings & configuration
|
||||||
* Realistic names for vehicles and weapons
|
* Improved medical system with various levels (basic/advanced) focus on gameplay/realism
|
||||||
* Realistic ballistics including wind and humidity
|
* Proper & consistent network-synced weather
|
||||||
* Backblast simulation
|
* Wind and weather-based ballistics
|
||||||
* A fire control system for armored vehicles and helicopters
|
* Captivity system
|
||||||
***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
|
#### Additional features
|
||||||
If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md).
|
* Carrying and dragging
|
||||||
|
* Realistic names for vehicles and weapons
|
||||||
|
* A fire control system (FCS) for armored vehicles and helicopters
|
||||||
|
* Realistic ballistics/FCS calculated in C/C++ extensions
|
||||||
|
* Backblast area and overpressure simulation
|
||||||
|
* Disposable launchers
|
||||||
|
* Realistic G-forces
|
||||||
|
* Vehicle locking
|
||||||
|
* Realistic night and thermal vision modes
|
||||||
|
* Magazine repacking
|
||||||
|
* Realistic weapon overheating mechanic
|
||||||
|
* Combat deafness (temporary loss of hearing) simulation
|
||||||
|
* Improved ragdoll physics
|
||||||
|
* Improved interactions for AARs and ammo bearers
|
||||||
|
* Adjustable sniper scopes
|
||||||
|
* No idle animation with lowered weapon
|
||||||
|
* No talking player avatar
|
||||||
|
* Jumping over obstacles, climbing over walls and cutting down fences
|
||||||
|
* Vector, MicroDAGR and Kestrel devices<br>
|
||||||
|
***and much more...***
|
||||||
|
|
||||||
|
### Guides & how-tos
|
||||||
|
If you installed ACE3 but have trouble understanding how it all works, or where to start, read this first:
|
||||||
|
* [Getting started](http://ace3mod.com/wiki/user/getting-started.html)
|
||||||
|
|
||||||
#### Contributing
|
#### Contributing
|
||||||
If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address.
|
You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address.
|
||||||
|
|
||||||
To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). See [this link](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) for details.
|
Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report a bug, propose a feature, or suggest changes to the existing ones. See also:
|
||||||
|
* [How to report an issue](http://ace3mod.com/wiki/user/how-to-report-an-issue.html)
|
||||||
|
* [How to make a feature request](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html)
|
||||||
|
|
||||||
#### Testing & Building
|
#### Testing & building
|
||||||
If you want to help us test the latest development changes, feel free to download our master branch, using either git — if familiar with the process — or directly, by following [this link](https://github.com/acemod/ACE3/archive/master.zip).
|
To help us test the latest development changes, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or [with git](https://help.github.com/articles/fetching-a-remote/)), then assemble a test build:
|
||||||
|
* [Setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) – step-by-step instructions on how to properly setup and build a version of ACE for testing purposes.
|
||||||
To find out how to set up your development environment and build a version of ACE for testing, follow [these instructions](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md).
|
|
||||||
|
@ -57,7 +57,7 @@ class ACE_Settings {
|
|||||||
};
|
};
|
||||||
class GVAR(simulationRadius) {
|
class GVAR(simulationRadius) {
|
||||||
displayName = "Simulation Radius";
|
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";
|
typeName = "SCALAR";
|
||||||
value = 3000;
|
value = 3000;
|
||||||
};
|
};
|
||||||
|
@ -69,7 +69,7 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class simulationRadius {
|
class simulationRadius {
|
||||||
displayName = "Simulation Radius";
|
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";
|
typeName = "NUMBER";
|
||||||
defaultValue = 3000;
|
defaultValue = 3000;
|
||||||
};
|
};
|
||||||
|
@ -20,19 +20,10 @@ GVAR(WindInfoStart) = time;
|
|||||||
GVAR(Protractor) = false;
|
GVAR(Protractor) = false;
|
||||||
GVAR(ProtractorStart) = time;
|
GVAR(ProtractorStart) = time;
|
||||||
|
|
||||||
// Those are only used in the pure sqf version (extension free PFH)
|
|
||||||
GVAR(SimulationPrecision) = 2;
|
|
||||||
GVAR(WindEnabled) = true;
|
|
||||||
GVAR(SpinDriftEnabled) = true;
|
|
||||||
GVAR(CoriolisEnabled) = true;
|
|
||||||
GVAR(EoetvoesEnabled) = true;
|
|
||||||
GVAR(AdvancedAirDragEnabled) = true;
|
|
||||||
GVAR(TransonicRegionEnabled) = true;
|
|
||||||
GVAR(AtmosphericDensitySimulationEnabled) = true;
|
|
||||||
|
|
||||||
GVAR(currentGrid) = 0;
|
GVAR(currentGrid) = 0;
|
||||||
GVAR(INIT_MESSAGE_ENABLED) = false;
|
GVAR(INIT_MESSAGE_ENABLED) = false;
|
||||||
|
|
||||||
|
GVAR(extensionAvailable) = true;
|
||||||
/* @TODO: Remove this until verisoning is in sync with cmake/build versioning
|
/* @TODO: Remove this until verisoning is in sync with cmake/build versioning
|
||||||
GVAR(extensionVersion) = ("ace_advanced_ballistics" callExtension "version");
|
GVAR(extensionVersion) = ("ace_advanced_ballistics" callExtension "version");
|
||||||
GVAR(extensionAvailable) = (GVAR(extensionVersion) == EXTENSION_REQUIRED_VERSION);
|
GVAR(extensionAvailable) = (GVAR(extensionVersion) == EXTENSION_REQUIRED_VERSION);
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleAccessory", "_initSpeedCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef"];
|
private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef", "_ballisticCoefficients", "_velocityBoundaries"];
|
||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
_weapon = _this select 1;
|
_weapon = _this select 1;
|
||||||
_mode = _this select 3;
|
_mode = _this select 3;
|
||||||
@ -35,49 +35,34 @@ if (!([_unit] call EFUNC(common,isPlayer))) exitWith {};
|
|||||||
if (underwater _unit) exitWith {};
|
if (underwater _unit) exitWith {};
|
||||||
if (!(_ammo isKindOf "BulletBase")) exitWith {};
|
if (!(_ammo isKindOf "BulletBase")) exitWith {};
|
||||||
if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {};
|
if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {};
|
||||||
if (GVAR(onlyActiveForLocalPlayers) && _unit != ACE_player) then { _abort = true; };
|
if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then {
|
||||||
|
if (GVAR(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(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 (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; };
|
||||||
|
|
||||||
if (_abort && alwaysSimulateForSnipers) then {
|
|
||||||
// The shooter is non local
|
|
||||||
if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then {
|
|
||||||
_opticsName = (primaryWeaponItems _unit) select 2;
|
|
||||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
|
||||||
_abort = _opticType != 2; // We only abort if the non local shooter is not a sniper
|
|
||||||
};
|
|
||||||
};
|
|
||||||
if (_abort || !(GVAR(extensionAvailable))) exitWith {
|
if (_abort || !(GVAR(extensionAvailable))) exitWith {
|
||||||
[_bullet, getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH);
|
[_bullet, getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH);
|
||||||
};
|
};
|
||||||
|
|
||||||
_airFriction = getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction");
|
_airFriction = getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction");
|
||||||
_muzzleVelocity = getNumber(configFile >> "cfgMagazines" >> _magazine >> "initSpeed");
|
|
||||||
_muzzleVelocityCoef = getNumber(configFile >> "cfgWeapons" >> _weapon >> "initSpeed");
|
|
||||||
if (_muzzleVelocityCoef > 0) then {
|
|
||||||
_muzzleVelocity = _muzzleVelocityCoef;
|
|
||||||
};
|
|
||||||
if (_muzzleVelocityCoef < 0) then {
|
|
||||||
_muzzleVelocity = _muzzleVelocity * (-1 * _muzzleVelocityCoef);
|
|
||||||
};
|
|
||||||
|
|
||||||
_muzzleAccessory = "";
|
_bulletVelocity = velocity _bullet;
|
||||||
switch (currentWeapon _unit) do {
|
_muzzleVelocity = vectorMagnitude _bulletVelocity;
|
||||||
case primaryWeapon _unit: { _muzzleAccessory = (primaryWeaponItems _unit) select 0; };
|
|
||||||
case handgunWeapon _unit: { _muzzleAccessory = (handgunItems _unit) select 0; };
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_muzzleAccessory != "" && isNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed")) then {
|
|
||||||
_initSpeedCoef = getNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed");
|
|
||||||
_muzzleVelocity = _muzzleVelocity * _initSpeedCoef;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (GVAR(barrelLengthInfluenceEnabled)) then {
|
if (GVAR(barrelLengthInfluenceEnabled)) then {
|
||||||
_muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift);
|
_muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift);
|
||||||
if (_muzzleVelocityShift != 0) then {
|
if (_muzzleVelocityShift != 0) then {
|
||||||
_bulletVelocity = velocity _bullet;
|
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
|
||||||
_bullet setVelocity _bulletVelocity;
|
_bullet setVelocity _bulletVelocity;
|
||||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||||
};
|
};
|
||||||
@ -87,19 +72,23 @@ if (GVAR(ammoTemperatureEnabled)) then {
|
|||||||
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
_temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2);
|
||||||
_muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
|
_muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift);
|
||||||
if (_muzzleVelocityShift != 0) then {
|
if (_muzzleVelocityShift != 0) then {
|
||||||
_bulletVelocity = velocity _bullet;
|
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift));
|
||||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity)));
|
|
||||||
_bullet setVelocity _bulletVelocity;
|
_bullet setVelocity _bulletVelocity;
|
||||||
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
_bulletTraceVisible = false;
|
_bulletTraceVisible = false;
|
||||||
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER" && currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER") then {
|
||||||
_opticsName = (primaryWeaponItems ACE_player) select 2;
|
if (currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]) then {
|
||||||
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
_bulletTraceVisible = true;
|
||||||
_bulletTraceVisible = (_opticType == 2 || currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]);
|
} else {
|
||||||
|
if (currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then {
|
||||||
|
_opticsName = (primaryWeaponItems ACE_player) select 2;
|
||||||
|
_opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType");
|
||||||
|
_bulletTraceVisible = _opticType == 2;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
_caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber");
|
_caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber");
|
||||||
@ -131,253 +120,47 @@ _dragModel = 1;
|
|||||||
_ballisticCoefficients = [];
|
_ballisticCoefficients = [];
|
||||||
_velocityBoundaries = [];
|
_velocityBoundaries = [];
|
||||||
_atmosphereModel = "ICAO";
|
_atmosphereModel = "ICAO";
|
||||||
if (GVAR(AdvancedAirDragEnabled)) then {
|
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then {
|
||||||
if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then {
|
_dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel");
|
||||||
_dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel");
|
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
||||||
if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
|
_dragModel = 1;
|
||||||
_dragModel = 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then {
|
|
||||||
_ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients");
|
|
||||||
};
|
|
||||||
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then {
|
|
||||||
_velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries");
|
|
||||||
};
|
|
||||||
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
|
||||||
_atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then {
|
||||||
|
_ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients");
|
||||||
|
};
|
||||||
|
if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then {
|
||||||
|
_velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries");
|
||||||
|
};
|
||||||
|
if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then {
|
||||||
|
_atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere");
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef USE_ADVANCEDBALLISTICS_DLL
|
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
||||||
GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000;
|
|
||||||
|
|
||||||
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)];
|
||||||
|
|
||||||
[{
|
[{
|
||||||
private ["_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
|
||||||
EXPLODE_4_PVT(_this select 0,_bullet,_caliber,_bulletTraceVisible,_index);
|
_args = _this select 0;
|
||||||
|
_bullet = _args select 0;
|
||||||
_bulletVelocity = velocity _bullet;
|
_caliber = _args select 1;
|
||||||
_bulletPosition = getPosASL _bullet;
|
_bulletTraceVisible = _args select 2;
|
||||||
|
_index = _args select 3;
|
||||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
|
||||||
|
_bulletVelocity = velocity _bullet;
|
||||||
if (!alive _bullet || _bulletSpeed < 100) exitWith {
|
_bulletPosition = getPosASL _bullet;
|
||||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
|
||||||
};
|
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
||||||
|
|
||||||
if (_bulletTraceVisible && _bulletSpeed > 600) then {
|
if (!alive _bullet || _bulletSpeed < 100) exitWith {
|
||||||
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,"","",""];
|
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||||
};
|
};
|
||||||
|
|
||||||
call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]);
|
if (_bulletTraceVisible && _bulletSpeed > 600) then {
|
||||||
|
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
||||||
}, GVAR(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]];
|
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(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 {
|
}, GVAR(simulationInterval), [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]] call CBA_fnc_addPerFrameHandler;
|
||||||
[{
|
|
||||||
private ["_bulletDatabaseEntry", "_bullet", "_caliber", "_muzzleVelocity", "_frames", "_speed", "_airFriction", "_airFrictionRef", "_dragModel", "_atmosphereModel", "_ballisticCoefficient", "_ballisticCoefficients", "_velocityBoundaries", "_airDensity", "_stabilityFactor", "_transonicStabilityCoef", "_twistDirection", "_unit", "_bulletTraceVisible", "_index", "_temperature", "_humidity", "_deltaT", "_TOF", "_bulletPosition", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_bulletSpeedAvg", "_wind", "_drag", "_dragRef", "_vect", "_accel", "_accelRef", "_centripetalAccel", "_pressure", "_pressureDeviation", "_windSourceObstacle", "_windSourceTerrain", "_height", "_roughnessLength", "_bulletDir", "_horizontalDeflection", "_horizontalDeflectionPartial", "_spinDrift", "_spinDriftPartial"];
|
|
||||||
|
|
||||||
{
|
|
||||||
_bulletDatabaseEntry = (GVAR(bulletDatabase) select _x);
|
|
||||||
if (!alive (_bulletDatabaseEntry select 0)) then {
|
|
||||||
_index = _bulletDatabaseEntry select 13;
|
|
||||||
GVAR(bulletDatabaseOccupiedIndices) = GVAR(bulletDatabaseOccupiedIndices) - [_index];
|
|
||||||
GVAR(bulletDatabaseFreeIndices) pushBack _index;
|
|
||||||
};
|
|
||||||
true
|
|
||||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
|
||||||
|
|
||||||
if (count GVAR(bulletDatabaseOccupiedIndices) == 0) exitWith {
|
|
||||||
GVAR(bulletDatabase) = [];
|
|
||||||
GVAR(bulletDatabaseStartTime) = [];
|
|
||||||
GVAR(bulletDatabaseSpeed) = [];
|
|
||||||
GVAR(bulletDatabaseFrames) = [];
|
|
||||||
GVAR(bulletDatabaseLastFrame) = [];
|
|
||||||
GVAR(bulletDatabaseHDeflect) = [];
|
|
||||||
GVAR(bulletDatabaseSpinDrift) = [];
|
|
||||||
GVAR(bulletDatabaseOccupiedIndices) = [];
|
|
||||||
GVAR(bulletDatabaseFreeIndices) = [];
|
|
||||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
|
||||||
};
|
|
||||||
|
|
||||||
{
|
|
||||||
_bulletDatabaseEntry = GVAR(bulletDatabase) select _x;
|
|
||||||
_bullet = _bulletDatabaseEntry select 0;
|
|
||||||
_caliber = _bulletDatabaseEntry select 1;
|
|
||||||
_airFriction = _bulletDatabaseEntry select 2;
|
|
||||||
_muzzleVelocity = _bulletDatabaseEntry select 3;
|
|
||||||
_stabilityFactor = _bulletDatabaseEntry select 4;
|
|
||||||
_transonicStabilityCoef = _bulletDatabaseEntry select 5;
|
|
||||||
_twistDirection = _bulletDatabaseEntry select 6;
|
|
||||||
_unit = _bulletDatabaseEntry select 7;
|
|
||||||
_bulletTraceVisible = _bulletDatabaseEntry select 8;
|
|
||||||
_ballisticCoefficients = _bulletDatabaseEntry select 9;
|
|
||||||
_velocityBoundaries = _bulletDatabaseEntry select 10;
|
|
||||||
_atmosphereModel = _bulletDatabaseEntry select 11;
|
|
||||||
_dragModel = _bulletDatabaseEntry select 12;
|
|
||||||
_index = _bulletDatabaseEntry select 13;
|
|
||||||
|
|
||||||
_TOF = time - (GVAR(bulletDatabaseStartTime) select _index);
|
|
||||||
|
|
||||||
_bulletVelocity = velocity _bullet;
|
|
||||||
_bulletPosition = getPosASL _bullet;
|
|
||||||
|
|
||||||
_bulletSpeed = vectorMagnitude _bulletVelocity;
|
|
||||||
_bulletDir = (_bulletVelocity select 0) atan2 (_bulletVelocity select 1);
|
|
||||||
|
|
||||||
_speed = (GVAR(bulletDatabaseSpeed) select _index);
|
|
||||||
GVAR(bulletDatabaseSpeed) set[_index, _speed + _bulletSpeed];
|
|
||||||
|
|
||||||
_frames = (GVAR(bulletDatabaseFrames) select _index);
|
|
||||||
GVAR(bulletDatabaseFrames) set[_index, _frames + 1];
|
|
||||||
|
|
||||||
_bulletSpeedAvg = (_speed / _frames);
|
|
||||||
|
|
||||||
if ((GVAR(SimulationPrecision) < 2) || {_frames % GVAR(SimulationPrecision) == _index % GVAR(SimulationPrecision)}) then {
|
|
||||||
_deltaT = time - (GVAR(bulletDatabaseLastFrame) select _index);
|
|
||||||
GVAR(bulletDatabaseLastFrame) set[_index, time];
|
|
||||||
|
|
||||||
_trueVelocity = _bulletVelocity;
|
|
||||||
_trueSpeed = _bulletSpeed;
|
|
||||||
_wind = [0, 0, 0];
|
|
||||||
if (GVAR(WindEnabled) && (vectorMagnitude ACE_wind) > 0) then {
|
|
||||||
_windSourceObstacle = _bulletPosition vectorDiff ((vectorNormalized ACE_wind) vectorMultiply 10);
|
|
||||||
_windSourceTerrain = _bulletPosition vectorDiff ((vectorNormalized ACE_wind) vectorMultiply 100);
|
|
||||||
|
|
||||||
if (!(lineIntersects [_bulletPosition, _windSourceObstacle]) && !(terrainIntersectASL [_bulletPosition, _windSourceTerrain])) then {
|
|
||||||
_wind = ACE_wind;
|
|
||||||
_height = ASLToATL(_bulletPosition) select 2;
|
|
||||||
_height = 0 max _height min 20;
|
|
||||||
if (_height < 20) then {
|
|
||||||
_roughnessLength = _bulletPosition call FUNC(calculateRoughnessLength);
|
|
||||||
_wind = _wind vectorMultiply (ln(_height / _roughnessLength) / ln(20 / _roughnessLength));
|
|
||||||
};
|
|
||||||
|
|
||||||
_trueVelocity = _bulletVelocity vectorDiff _wind;
|
|
||||||
_trueSpeed = vectorMagnitude _trueVelocity;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
_airFrictionRef = _airFriction;
|
|
||||||
if (GVAR(AdvancedAirDragEnabled) && (count _ballisticCoefficients) == (count _velocityBoundaries) + 1) then {
|
|
||||||
_dragRef = _deltaT * _airFrictionRef * _bulletSpeed * _bulletSpeed;
|
|
||||||
_accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorDiff _accelRef;
|
|
||||||
|
|
||||||
_ballisticCoefficient = (_ballisticCoefficients select 0);
|
|
||||||
for "_i" from (count _velocityBoundaries) - 1 to 0 step -1 do {
|
|
||||||
if (_bulletSpeed < (_velocityBoundaries select _i)) exitWith {
|
|
||||||
_ballisticCoefficient = (_ballisticCoefficients select (_i + 1));
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
|
|
||||||
_pressure = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure);
|
|
||||||
_temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2);
|
|
||||||
_humidity = EGVAR(weather,currentHumidity);
|
|
||||||
_airDensity = STD_AIR_DENSITY_ICAO;
|
|
||||||
if (_humidity > 0) then {
|
|
||||||
private ["_pSat", "_vaporPressure", "_partialPressure"];
|
|
||||||
// Saturation vapor pressure calculated according to: http://wahiduddin.net/calc/density_algorithms.htm
|
|
||||||
_pSat = 6.1078 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3));
|
|
||||||
_vaporPressure = _humidity * _pSat;
|
|
||||||
_partialPressure = (_pressure * 100)- _vaporPressure;
|
|
||||||
|
|
||||||
_airDensity = (_partialPressure * DRY_AIR_MOLAR_MASS + _vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(_temperature));
|
|
||||||
} else {
|
|
||||||
_airDensity = (_pressure * 100) / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(_temperature));
|
|
||||||
};
|
|
||||||
if (_atmosphereModel == "ICAO") then {
|
|
||||||
_ballisticCoefficient = (STD_AIR_DENSITY_ICAO / _airDensity) * _ballisticCoefficient;
|
|
||||||
} else {
|
|
||||||
_ballisticCoefficient = (STD_AIR_DENSITY_ASM / _airDensity) * _ballisticCoefficient;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
_drag = _deltaT * ([_dragModel, _ballisticCoefficient, _trueSpeed] call FUNC(calculateRetardation));
|
|
||||||
_accel = (vectorNormalized _trueVelocity) vectorMultiply (_drag);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorDiff _accel;
|
|
||||||
} else {
|
|
||||||
if (GVAR(AtmosphericDensitySimulationEnabled)) then {
|
|
||||||
_pressureDeviation = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure) - 1013.25;
|
|
||||||
_temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2);
|
|
||||||
_humidity = EGVAR(weather,currentHumidity);
|
|
||||||
_airFriction = _airFriction + ((_temperature - 15) * 0.0000015 + _humidity * 0.0000040 + _pressureDeviation * -0.0000009);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_airFriction != _airFrictionRef || vectorMagnitude _wind > 0) then {
|
|
||||||
_dragRef = _deltaT * _airFrictionRef * _bulletSpeed * _bulletSpeed;
|
|
||||||
_accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorDiff _accelRef;
|
|
||||||
|
|
||||||
_drag = _deltaT * _airFriction * _trueSpeed * _trueSpeed;
|
|
||||||
_accel = (vectorNormalized _trueVelocity) vectorMultiply (_drag);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (GVAR(CoriolisEnabled) && _bulletSpeedAvg > 0) then {
|
|
||||||
_horizontalDeflection = 0.0000729 * (_unit distanceSqr _bullet) * sin(EGVAR(weather,Latitude)) / _bulletSpeedAvg;
|
|
||||||
_horizontalDeflectionPartial = _horizontalDeflection - (GVAR(bulletDatabaseHDeflect) select _index);
|
|
||||||
GVAR(bulletDatabaseHDeflect) set[_index, _horizontalDeflection];
|
|
||||||
_vect = [sin(_bulletDir + 90) * _horizontalDeflectionPartial, cos(_bulletDir + 90) * _horizontalDeflectionPartial, 0];
|
|
||||||
|
|
||||||
_bulletPosition = _bulletPosition vectorAdd _vect;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
// Negligible effect on the trajectory
|
|
||||||
if (GVAR(EoetvoesEnabled)) then {
|
|
||||||
_centripetalAccel = 2 * 0.0000729 * (_muzzleVelocity / -32.2) * cos(EGVAR(weather,Latitude)) * sin(_bulletDir);
|
|
||||||
_accel = [0, 0, -(_centripetalAccel * _deltaT)];
|
|
||||||
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
|
||||||
};
|
|
||||||
//*/
|
|
||||||
|
|
||||||
if (GVAR(SpinDriftEnabled)) then {
|
|
||||||
_spinDrift = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
|
||||||
_spinDriftPartial = _spinDrift - (GVAR(bulletDatabaseSpinDrift) select _index);
|
|
||||||
GVAR(bulletDatabaseSpinDrift) set[_index, _spinDrift];
|
|
||||||
_vect = [sin(_bulletDir + 90) * _spinDriftPartial, cos(_bulletDir + 90) * _spinDriftPartial, 0];
|
|
||||||
|
|
||||||
_bulletPosition = _bulletPosition vectorAdd _vect;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (GVAR(TransonicRegionEnabled) && _transonicStabilityCoef < 1) then {
|
|
||||||
if (_bulletSpeed < 345 && _bulletSpeedAvg > 340 && _bulletSpeed > 335) then {
|
|
||||||
_accel = [(random 0.8) - 0.4, (random 0.8) - 0.4, (random 0.8) - 0.4];
|
|
||||||
_accel = _accel vectorMultiply (1 - _transonicStabilityCoef);
|
|
||||||
_bulletVelocity = _bulletVelocity vectorAdd _accel;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_bulletTraceVisible && _bulletSpeed > 600 && _bullet distanceSqr _unit > 400) then {
|
|
||||||
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""];
|
|
||||||
};
|
|
||||||
|
|
||||||
_bullet setVelocity _bulletVelocity;
|
|
||||||
_bullet setPosASL _bulletPosition;
|
|
||||||
true
|
|
||||||
} count GVAR(bulletDatabaseOccupiedIndices);
|
|
||||||
|
|
||||||
}, GVAR(simulationInterval), []] call CBA_fnc_addPerFrameHandler;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
#define COMPONENT advanced_ballistics
|
#define COMPONENT advanced_ballistics
|
||||||
#include "\z\ace\addons\main\script_mod.hpp"
|
#include "\z\ace\addons\main\script_mod.hpp"
|
||||||
|
|
||||||
#define USE_ADVANCEDBALLISTICS_DLL
|
|
||||||
|
|
||||||
#ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS
|
#ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS
|
||||||
#define DEBUG_MODE_FULL
|
#define DEBUG_MODE_FULL
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Edited with tabler. -->
|
|
||||||
<Project name="ACE">
|
<Project name="ACE">
|
||||||
<Package name="AdvancedBallistics">
|
<Package name="AdvancedBallistics">
|
||||||
<Key ID="STR_ACE_AdvancedBallistics_WindInfoKey">
|
<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">
|
<Project name="ACE">
|
||||||
<Package name="Aircraft">
|
<Package name="Aircraft">
|
||||||
<Key ID="STR_ACE_Aircraft_CMFlareLauncher_Burst_Name">
|
<Key ID="STR_ACE_Aircraft_CMFlareLauncher_Burst_Name">
|
||||||
@ -29,23 +29,25 @@
|
|||||||
<English>Open Cargo Door</English>
|
<English>Open Cargo Door</English>
|
||||||
<German>Laderampe öffnen</German>
|
<German>Laderampe öffnen</German>
|
||||||
<Spanish>Abrir compuerta de carga</Spanish>
|
<Spanish>Abrir compuerta de carga</Spanish>
|
||||||
<French>Ourvir rampe cargo</French>
|
<French>Ourvir la rampe</French>
|
||||||
<Polish>Otwórz drzwi ładowni</Polish>
|
<Polish>Otwórz drzwi ładowni</Polish>
|
||||||
<Czech>Otevřít nákladní prostor</Czech>
|
<Czech>Otevřít nákladní prostor</Czech>
|
||||||
<Hungarian>Rakodórámpa nyitása</Hungarian>
|
<Hungarian>Rakodórámpa nyitása</Hungarian>
|
||||||
<Russian>Открыть грузовой отсек</Russian>
|
<Russian>Открыть грузовой отсек</Russian>
|
||||||
<Italian>Apri la porta del cargo</Italian>
|
<Italian>Apri la porta del cargo</Italian>
|
||||||
|
<Portuguese>Abrir porta de carga</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Aircraft_CloseCargoRamp">
|
<Key ID="STR_ACE_Aircraft_CloseCargoRamp">
|
||||||
<English>Close Cargo Door</English>
|
<English>Close Cargo Door</English>
|
||||||
<German>Laderampe schließen</German>
|
<German>Laderampe schließen</German>
|
||||||
<Spanish>Cerrar compuerta de carga</Spanish>
|
<Spanish>Cerrar compuerta de carga</Spanish>
|
||||||
<French>Fermer rampe cargo</French>
|
<French>Fermer la rampe</French>
|
||||||
<Polish>Zamknij drzwi ładowni</Polish>
|
<Polish>Zamknij drzwi ładowni</Polish>
|
||||||
<Czech>Zavřít nákladní prostor</Czech>
|
<Czech>Zavřít nákladní prostor</Czech>
|
||||||
<Hungarian>Rakodórámpa zárása</Hungarian>
|
<Hungarian>Rakodórámpa zárása</Hungarian>
|
||||||
<Russian>Закрыть грузовой отсек</Russian>
|
<Russian>Закрыть грузовой отсек</Russian>
|
||||||
<Italian>Chiudi la porta del cargo</Italian>
|
<Italian>Chiudi la porta del cargo</Italian>
|
||||||
|
<Portuguese>Fechar porta de carga</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -760,7 +760,7 @@ class ATragMX_Display {
|
|||||||
y=0.265*safezoneH+safezoneY+0.35;
|
y=0.265*safezoneH+safezoneY+0.35;
|
||||||
strings[]={"Height","Width"};
|
strings[]={"Height","Width"};
|
||||||
values[]={1,0};
|
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 {
|
class TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE: TEXT_TARGET_RANGE_ASSIST_MEASUREMENT_METHOD {
|
||||||
idc=7003;
|
idc=7003;
|
||||||
|
@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then {
|
|||||||
private ["_bulletLength", "_stabilityFactor"];
|
private ["_bulletLength", "_stabilityFactor"];
|
||||||
_bulletLength = 1.8;
|
_bulletLength = 1.8;
|
||||||
_stabilityFactor = 1.5;
|
_stabilityFactor = 1.5;
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||||
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||||
};
|
};
|
||||||
|
@ -106,7 +106,7 @@ private ["_wind1", "_wind2", "_windDrift"];
|
|||||||
_wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0];
|
_wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0];
|
||||||
_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0];
|
_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0];
|
||||||
_windDrift = 0;
|
_windDrift = 0;
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
_bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection);
|
_bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ _speedAverage = 0;
|
|||||||
|
|
||||||
private ["_eoetvoesMultiplier"];
|
private ["_eoetvoesMultiplier"];
|
||||||
_eoetvoesMultiplier = 0;
|
_eoetvoesMultiplier = 0;
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
_eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire);
|
_eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -142,14 +142,12 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
|
|||||||
_trueSpeed = vectorMagnitude _trueVelocity;
|
_trueSpeed = vectorMagnitude _trueVelocity;
|
||||||
|
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false]) then {
|
_drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then {
|
||||||
_drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then {
|
parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed]))
|
||||||
parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed]))
|
} else {
|
||||||
} else {
|
([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation))
|
||||||
([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation))
|
|
||||||
};
|
|
||||||
_bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag);
|
|
||||||
};
|
};
|
||||||
|
_bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag);
|
||||||
} else {
|
} else {
|
||||||
_bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction);
|
_bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction);
|
||||||
};
|
};
|
||||||
@ -177,23 +175,20 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
|
|||||||
_kineticEnergy = _kineticEnergy * 0.737562149;
|
_kineticEnergy = _kineticEnergy * 0.737562149;
|
||||||
|
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then {
|
// Coriolis
|
||||||
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
||||||
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
||||||
_windage1 = _windage1 + _horizontalCoriolis;
|
_windage1 = _windage1 + _horizontalCoriolis;
|
||||||
_windage2 = _windage2 + _horizontalCoriolis;
|
_windage2 = _windage2 + _horizontalCoriolis;
|
||||||
};
|
// Eoetvoes
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
||||||
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
||||||
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
_elevation = _elevation + _verticalCoriolis;
|
||||||
_elevation = _elevation + _verticalCoriolis;
|
// Spin drift
|
||||||
};
|
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then {
|
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
||||||
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
_windage1 = _windage1 + _spinDrift;
|
||||||
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
_windage2 = _windage2 + _spinDrift;
|
||||||
_windage1 = _windage1 + _spinDrift;
|
|
||||||
_windage2 = _windage2 + _spinDrift;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]];
|
GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]];
|
||||||
@ -217,23 +212,20 @@ _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2));
|
|||||||
_kineticEnergy = _kineticEnergy * 0.737562149;
|
_kineticEnergy = _kineticEnergy * 0.737562149;
|
||||||
|
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then {
|
// Coriolis
|
||||||
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
|
||||||
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
|
||||||
_windage1 = _windage1 + _horizontalCoriolis;
|
_windage1 = _windage1 + _horizontalCoriolis;
|
||||||
_windage2 = _windage2 + _horizontalCoriolis;
|
_windage2 = _windage2 + _horizontalCoriolis;
|
||||||
};
|
// Eoetvoes
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then {
|
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
||||||
_verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier;
|
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
||||||
_verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1));
|
_elevation = _elevation + _verticalCoriolis;
|
||||||
_elevation = _elevation + _verticalCoriolis;
|
// Spin drift
|
||||||
};
|
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
||||||
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then {
|
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
||||||
_spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83;
|
_windage1 = _windage1 + _spinDrift;
|
||||||
_spinDrift = - atan(_spinDeflection / (_bulletPos select 1));
|
_windage2 = _windage2 + _spinDrift;
|
||||||
_windage1 = _windage1 + _spinDrift;
|
|
||||||
_windage2 = _windage2 + _spinDrift;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60]
|
[_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60]
|
||||||
|
@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then {
|
|||||||
private ["_bulletLength", "_stabilityFactor"];
|
private ["_bulletLength", "_stabilityFactor"];
|
||||||
_bulletLength = 1.8;
|
_bulletLength = 1.8;
|
||||||
_stabilityFactor = 1.5;
|
_stabilityFactor = 1.5;
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
|
||||||
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
_stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
|
||||||
};
|
};
|
||||||
|
@ -60,7 +60,7 @@ private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifl
|
|||||||
_boreHeight = parseNumber(ctrlText 120000);
|
_boreHeight = parseNumber(ctrlText 120000);
|
||||||
_bulletMass = parseNumber(ctrlText 120010);
|
_bulletMass = parseNumber(ctrlText 120010);
|
||||||
_bulletDiameter = parseNumber(ctrlText 120020);
|
_bulletDiameter = parseNumber(ctrlText 120020);
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
_airFriction = 0.1 max parseNumber(ctrlText 120030) min 2;
|
_airFriction = 0.1 max parseNumber(ctrlText 120030) min 2;
|
||||||
} else {
|
} else {
|
||||||
_airFriction = parseNumber(ctrlText 120030) / -1000;
|
_airFriction = parseNumber(ctrlText 120030) / -1000;
|
||||||
@ -87,7 +87,7 @@ GVAR(workingMemory) set [5, _boreHeight];
|
|||||||
GVAR(workingMemory) set [12, _bulletMass];
|
GVAR(workingMemory) set [12, _bulletMass];
|
||||||
GVAR(workingMemory) set [13, _bulletDiameter];
|
GVAR(workingMemory) set [13, _bulletDiameter];
|
||||||
GVAR(workingMemory) set [14, _rifleTwist];
|
GVAR(workingMemory) set [14, _rifleTwist];
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
GVAR(workingMemory) set [15, _airFriction];
|
GVAR(workingMemory) set [15, _airFriction];
|
||||||
} else {
|
} else {
|
||||||
GVAR(workingMemory) set [4, _airFriction];
|
GVAR(workingMemory) set [4, _airFriction];
|
||||||
|
@ -26,7 +26,7 @@ if (GVAR(currentUnit) != 2) then {
|
|||||||
} else {
|
} else {
|
||||||
ctrlSetText [110, Str(Round(GVAR(workingMemory) select 12))];
|
ctrlSetText [110, Str(Round(GVAR(workingMemory) select 12))];
|
||||||
};
|
};
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
||||||
} else {
|
} else {
|
||||||
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
||||||
|
@ -32,7 +32,7 @@ if (GVAR(currentUnit) != 2) then {
|
|||||||
} else {
|
} else {
|
||||||
ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) * 1000) / 1000)];
|
ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) * 1000) / 1000)];
|
||||||
};
|
};
|
||||||
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then {
|
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
|
||||||
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
|
||||||
} else {
|
} else {
|
||||||
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)];
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Edited with tabler. -->
|
|
||||||
<Project name="ACE">
|
<Project name="ACE">
|
||||||
<Package name="ATragMX">
|
<Package name="ATragMX">
|
||||||
<Key ID="STR_ACE_ATragMX_Name">
|
<Key ID="STR_ACE_ATragMX_Name">
|
||||||
@ -21,6 +20,7 @@
|
|||||||
<Spanish>Abrir ATragMX</Spanish>
|
<Spanish>Abrir ATragMX</Spanish>
|
||||||
<French>Ouvrir ATragMX</French>
|
<French>Ouvrir ATragMX</French>
|
||||||
<German>ATragMX öffnen</German>
|
<German>ATragMX öffnen</German>
|
||||||
|
<Italian>Apri ATragMX</Italian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_ATragMX_Description">
|
<Key ID="STR_ACE_ATragMX_Description">
|
||||||
<English>Rugged PDA with ATragMX</English>
|
<English>Rugged PDA with ATragMX</English>
|
||||||
@ -28,6 +28,8 @@
|
|||||||
<Russian>Защищенный КПК с ATragMX</Russian>
|
<Russian>Защищенный КПК с ATragMX</Russian>
|
||||||
<Spanish>PDA rugerizada con ATragMX</Spanish>
|
<Spanish>PDA rugerizada con ATragMX</Spanish>
|
||||||
<German>Robuster PDA mit ATragMX</German>
|
<German>Robuster PDA mit ATragMX</German>
|
||||||
|
<French>PDA robuste avec ATragMX</French>
|
||||||
|
<Italian>PDA Robusto con ATragMX</Italian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_ATragMX_ATragMXDialogKey">
|
<Key ID="STR_ACE_ATragMX_ATragMXDialogKey">
|
||||||
<English>Open ATragMX</English>
|
<English>Open ATragMX</English>
|
||||||
@ -36,6 +38,7 @@
|
|||||||
<Spanish>Abrir ATragMX</Spanish>
|
<Spanish>Abrir ATragMX</Spanish>
|
||||||
<French>Ouvrir ATragMX</French>
|
<French>Ouvrir ATragMX</French>
|
||||||
<German>ATragMX öffnen</German>
|
<German>ATragMX öffnen</German>
|
||||||
|
<Italian>Apri ATragMX</Italian>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
@ -176,8 +176,10 @@
|
|||||||
<Russian>Не удалось присоединить</Russian>
|
<Russian>Не удалось присоединить</Russian>
|
||||||
<Spanish>Error al acoplar</Spanish>
|
<Spanish>Error al acoplar</Spanish>
|
||||||
<Czech>Připnutí selhalo</Czech>
|
<Czech>Připnutí selhalo</Czech>
|
||||||
|
<Portuguese>Erro ao anexar</Portuguese>
|
||||||
<Polish>Przyczepianie nie powiodło się</Polish>
|
<Polish>Przyczepianie nie powiodło się</Polish>
|
||||||
<Hungarian>Hozzácsatolás sikertelen</Hungarian>
|
<Hungarian>Hozzácsatolás sikertelen</Hungarian>
|
||||||
|
<Italian>Impossibile Attaccare</Italian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Attach_Item_Attached">
|
<Key ID="STR_ACE_Attach_Item_Attached">
|
||||||
<English>%1<br/>Attached</English>
|
<English>%1<br/>Attached</English>
|
||||||
|
@ -337,7 +337,7 @@ class CfgAmmo {
|
|||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
ACE_bulletLength=1.353;
|
ACE_bulletLength=1.353;
|
||||||
ACE_bulletMass=190;
|
ACE_bulletMass=190;
|
||||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||||
ACE_ballisticCoefficients[]={0.268};
|
ACE_ballisticCoefficients[]={0.268};
|
||||||
ACE_velocityBoundaries[]={};
|
ACE_velocityBoundaries[]={};
|
||||||
ACE_standardAtmosphere="ICAO";
|
ACE_standardAtmosphere="ICAO";
|
||||||
@ -353,7 +353,7 @@ class CfgAmmo {
|
|||||||
ACE_caliber=0.308;
|
ACE_caliber=0.308;
|
||||||
ACE_bulletLength=1.489;
|
ACE_bulletLength=1.489;
|
||||||
ACE_bulletMass=220;
|
ACE_bulletMass=220;
|
||||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
|
||||||
ACE_ballisticCoefficients[]={0.310};
|
ACE_ballisticCoefficients[]={0.310};
|
||||||
ACE_velocityBoundaries[]={};
|
ACE_velocityBoundaries[]={};
|
||||||
ACE_standardAtmosphere="ICAO";
|
ACE_standardAtmosphere="ICAO";
|
||||||
@ -572,7 +572,6 @@ class CfgAmmo {
|
|||||||
ACE_caliber=0.366;
|
ACE_caliber=0.366;
|
||||||
ACE_bulletLength=1.350;
|
ACE_bulletLength=1.350;
|
||||||
ACE_bulletMass=230;
|
ACE_bulletMass=230;
|
||||||
ACE_transonicStabilityCoef=1;
|
|
||||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||||
ACE_ballisticCoefficients[]={0.368};
|
ACE_ballisticCoefficients[]={0.368};
|
||||||
ACE_velocityBoundaries[]={};
|
ACE_velocityBoundaries[]={};
|
||||||
|
@ -322,13 +322,14 @@ class CfgMagazines {
|
|||||||
class 10Rnd_762x54_Mag: 10Rnd_762x51_Mag {
|
class 10Rnd_762x54_Mag: 10Rnd_762x51_Mag {
|
||||||
initSpeed = 800;
|
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";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
ammo = "ACE_762x54_Ball_7T2";
|
ammo = "ACE_762x54_Ball_7T2";
|
||||||
displayName = "$STR_ACE_10Rnd_762x54_Tracer_mag_Name";
|
displayName = "$STR_ACE_10Rnd_762x54_Tracer_mag_Name";
|
||||||
displayNameShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_NameShort";
|
displayNameShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_NameShort";
|
||||||
descriptionShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_Description";
|
descriptionShort = "$STR_ACE_10Rnd_762x54_Tracer_mag_Description";
|
||||||
initSpeed = 800;
|
initSpeed = 800;
|
||||||
|
tracersEvery = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
class 150Rnd_762x54_Box: 150Rnd_762x51_Box {
|
class 150Rnd_762x54_Box: 150Rnd_762x51_Box {
|
||||||
|
@ -9,7 +9,7 @@ class CfgVehicles {
|
|||||||
//hitPart = "systemChat str _this";
|
//hitPart = "systemChat str _this";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class NATO_Box_Base;
|
class NATO_Box_Base;
|
||||||
class Box_NATO_Wps_F: NATO_Box_Base {
|
class Box_NATO_Wps_F: NATO_Box_Base {
|
||||||
class TransportMagazines {
|
class TransportMagazines {
|
||||||
@ -42,6 +42,7 @@ class CfgVehicles {
|
|||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
|
||||||
@ -59,6 +60,7 @@ class CfgVehicles {
|
|||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_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_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,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_20Rnd_762x51_Mk316_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4);
|
||||||
|
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,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_0_Mag,4);
|
||||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_1_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 {
|
class srifle_EBR_F: EBR_base_F {
|
||||||
magazines[] = {
|
magazines[] = {
|
||||||
"20Rnd_762x51_Mag",
|
"20Rnd_762x51_Mag",
|
||||||
|
"ACE_20Rnd_762x51_Mag_Tracer",
|
||||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||||
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||||
@ -560,6 +561,7 @@ class CfgWeapons {
|
|||||||
class srifle_DMR_03_F: DMR_03_base_F {
|
class srifle_DMR_03_F: DMR_03_base_F {
|
||||||
magazines[] = {
|
magazines[] = {
|
||||||
"20Rnd_762x51_Mag",
|
"20Rnd_762x51_Mag",
|
||||||
|
"ACE_20Rnd_762x51_Mag_Tracer",
|
||||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||||
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||||
@ -584,6 +586,7 @@ class CfgWeapons {
|
|||||||
class srifle_DMR_06_camo_F: DMR_06_base_F {
|
class srifle_DMR_06_camo_F: DMR_06_base_F {
|
||||||
magazines[] = {
|
magazines[] = {
|
||||||
"20Rnd_762x51_Mag",
|
"20Rnd_762x51_Mag",
|
||||||
|
"ACE_20Rnd_762x51_Mag_Tracer",
|
||||||
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
"ACE_20Rnd_762x51_Mag_Tracer_Dim",
|
||||||
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
"ACE_20Rnd_762x51_Mk316_Mod_0_Mag",
|
||||||
"ACE_20Rnd_762x51_M118LR_Mag",
|
"ACE_20Rnd_762x51_M118LR_Mag",
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
class CfgPatches {
|
class CfgPatches {
|
||||||
class ADDON {
|
class ADDON {
|
||||||
units[] = {"ACE_TargetWall"};
|
units[] = {"ACE_TargetWall","ACE_Box_Ammo"};
|
||||||
weapons[] = {};
|
weapons[] = {};
|
||||||
requiredVersion = REQUIRED_VERSION;
|
requiredVersion = REQUIRED_VERSION;
|
||||||
requiredAddons[] = {"ace_common"};
|
requiredAddons[] = {"ace_common"};
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
// by commy2
|
// by commy2
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_wall", "_paper"];
|
||||||
|
|
||||||
_wall = _this select 0;
|
_wall = _this select 0;
|
||||||
|
|
||||||
if (local _wall) then {
|
if (local _wall) then {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -101,25 +101,20 @@ class CfgVehicles {
|
|||||||
#define MACRO_LOADUNLOADCAPTIVE \
|
#define MACRO_LOADUNLOADCAPTIVE \
|
||||||
class ACE_Actions { \
|
class ACE_Actions { \
|
||||||
class ACE_MainActions { \
|
class ACE_MainActions { \
|
||||||
selection = ""; \
|
class GVAR(LoadCaptive) { \
|
||||||
class ACE_LoadCaptive { \
|
|
||||||
displayName = "$STR_ACE_Captives_LoadCaptive"; \
|
displayName = "$STR_ACE_Captives_LoadCaptive"; \
|
||||||
distance = 4; \
|
distance = 4; \
|
||||||
condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \
|
condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \
|
||||||
statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \
|
statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \
|
||||||
exceptions[] = {"isNotEscorting"}; \
|
exceptions[] = {"isNotEscorting"}; \
|
||||||
showDisabled = 0; \
|
|
||||||
priority = 1.2; \
|
priority = 1.2; \
|
||||||
hotkey = "L"; \
|
|
||||||
}; \
|
}; \
|
||||||
class ACE_UnloadCaptive { \
|
class GVAR(UnloadCaptive) { \
|
||||||
displayName = "$STR_ACE_Captives_UnloadCaptive"; \
|
displayName = "$STR_ACE_Captives_UnloadCaptive"; \
|
||||||
distance = 4; \
|
distance = 4; \
|
||||||
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \
|
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \
|
||||||
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \
|
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \
|
||||||
showDisabled = 0; \
|
|
||||||
priority = 1.2; \
|
priority = 1.2; \
|
||||||
hotkey = "C"; \
|
|
||||||
}; \
|
}; \
|
||||||
}; \
|
}; \
|
||||||
};
|
};
|
||||||
|
@ -22,7 +22,7 @@ PARAMS_3(_unit,_target,_state);
|
|||||||
if (_state) then {
|
if (_state) then {
|
||||||
if (_unit getVariable [QGVAR(isEscorting), false]) exitWith {};
|
if (_unit getVariable [QGVAR(isEscorting), false]) exitWith {};
|
||||||
|
|
||||||
[_unit, _target] call EFUNC(common,claim);
|
[_unit, _target, false] call EFUNC(common,claim);
|
||||||
_unit setVariable [QGVAR(isEscorting), true, true];
|
_unit setVariable [QGVAR(isEscorting), true, true];
|
||||||
|
|
||||||
_target attachTo [_unit, [0, 1, 0]];
|
_target attachTo [_unit, [0, 1, 0]];
|
||||||
@ -34,8 +34,7 @@ if (_state) then {
|
|||||||
{[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);},
|
{[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);},
|
||||||
nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))];
|
nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))];
|
||||||
|
|
||||||
private "_escortFnc";
|
[{
|
||||||
_escortFnc = {
|
|
||||||
EXPLODE_3_PVT((_this select 0),_unit,_target,_actionID);
|
EXPLODE_3_PVT((_this select 0),_unit,_target,_actionID);
|
||||||
if (_unit getVariable [QGVAR(isEscorting), false]) then {
|
if (_unit getVariable [QGVAR(isEscorting), false]) then {
|
||||||
if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then {
|
if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then {
|
||||||
@ -45,13 +44,12 @@ if (_state) then {
|
|||||||
|
|
||||||
if (!(_unit getVariable [QGVAR(isEscorting), false])) then {
|
if (!(_unit getVariable [QGVAR(isEscorting), false])) then {
|
||||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||||
[objNull, _target] call EFUNC(common,claim);
|
[objNull, _target, false] call EFUNC(common,claim);
|
||||||
detach _target;
|
detach _target;
|
||||||
_unit removeAction _actionID;
|
_unit removeAction _actionID;
|
||||||
_unit setVariable [QGVAR(escortedUnit), objNull, true];
|
_unit setVariable [QGVAR(escortedUnit), objNull, true];
|
||||||
};
|
};
|
||||||
};
|
}, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
|
||||||
[_escortFnc, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
_unit setVariable [QGVAR(isEscorting), false, true];
|
_unit setVariable [QGVAR(isEscorting), false, true];
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project name="ACE">
|
<Project name="ACE">
|
||||||
<Package name="Captives">
|
<Package name="Captives">
|
||||||
<Key ID="STR_ACE_Captives_SetCaptive">
|
<Key ID="STR_ACE_Captives_SetCaptive">
|
||||||
@ -119,6 +119,7 @@
|
|||||||
<Polish>Ekwipunek rewidowanej osoby</Polish>
|
<Polish>Ekwipunek rewidowanej osoby</Polish>
|
||||||
<Russian>Инвентарь обысканного человека</Russian>
|
<Russian>Инвентарь обысканного человека</Russian>
|
||||||
<Portuguese>Inventário da pessoa revistada</Portuguese>
|
<Portuguese>Inventário da pessoa revistada</Portuguese>
|
||||||
|
<Italian>Inventario delle persone perquisite</Italian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Captives_FriskPerson">
|
<Key ID="STR_ACE_Captives_FriskPerson">
|
||||||
<English>Frisk person</English>
|
<English>Frisk person</English>
|
||||||
@ -137,6 +138,7 @@
|
|||||||
<French>Se rendre</French>
|
<French>Se rendre</French>
|
||||||
<German>Kapitulieren</German>
|
<German>Kapitulieren</German>
|
||||||
<Spanish>Rendirse</Spanish>
|
<Spanish>Rendirse</Spanish>
|
||||||
|
<Portuguese>Render-se</Portuguese>
|
||||||
<Czech>Vzdát se</Czech>
|
<Czech>Vzdát se</Czech>
|
||||||
<Polish>Poddaj się</Polish>
|
<Polish>Poddaj się</Polish>
|
||||||
<Russian>Сдаться</Russian>
|
<Russian>Сдаться</Russian>
|
||||||
@ -148,6 +150,7 @@
|
|||||||
<French>Annuler la capitulation</French>
|
<French>Annuler la capitulation</French>
|
||||||
<German>Den Kampf erneut aufnehmen</German>
|
<German>Den Kampf erneut aufnehmen</German>
|
||||||
<Spanish>Dejar de rendirse</Spanish>
|
<Spanish>Dejar de rendirse</Spanish>
|
||||||
|
<Portuguese>Parar de se render</Portuguese>
|
||||||
<Czech>Přestat se vzdávat</Czech>
|
<Czech>Přestat se vzdávat</Czech>
|
||||||
<Polish>Podejmij walkę ponownie</Polish>
|
<Polish>Podejmij walkę ponownie</Polish>
|
||||||
<Russian>Прекратить сдачу в плен</Russian>
|
<Russian>Прекратить сдачу в плен</Russian>
|
||||||
@ -181,6 +184,7 @@
|
|||||||
<French>Rien sous le curseur</French>
|
<French>Rien sous le curseur</French>
|
||||||
<German>Es wurde nichts ausgewählt</German>
|
<German>Es wurde nichts ausgewählt</German>
|
||||||
<Spanish>Nada bajo el ratón</Spanish>
|
<Spanish>Nada bajo el ratón</Spanish>
|
||||||
|
<Portuguese>Nada debaixo do mouse</Portuguese>
|
||||||
<Czech>Nic není vybráno</Czech>
|
<Czech>Nic není vybráno</Czech>
|
||||||
<Polish>Nie ma nic pod kursorem</Polish>
|
<Polish>Nie ma nic pod kursorem</Polish>
|
||||||
<Russian>Ничего не выделено</Russian>
|
<Russian>Ничего не выделено</Russian>
|
||||||
|
@ -24,7 +24,7 @@ class Extended_InitPost_EventHandlers {
|
|||||||
init = QUOTE(if (local (_this select 0)) then {_this call FUNC(setName)};);
|
init = QUOTE(if (local (_this select 0)) then {_this call FUNC(setName)};);
|
||||||
};
|
};
|
||||||
class GVAR(forceWalk) {
|
class GVAR(forceWalk) {
|
||||||
init = QUOTE(if (local (_this select 0)) then {_this call FUNC(applyForceWalkStatus);};);
|
init = QUOTE(_this call FUNC(applyForceWalkStatus));
|
||||||
};
|
};
|
||||||
class GVAR(muteUnit) {
|
class GVAR(muteUnit) {
|
||||||
init = QUOTE(_this call FUNC(muteUnitHandleInitPost));
|
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 {
|
class ACE_FakePrimaryWeapon: Rifle_Base_F {
|
||||||
scope = 2;
|
scope = 2;
|
||||||
scopeCurator = 1;
|
scopeCurator = 1;
|
||||||
|
scopeArsenal = 1;
|
||||||
displayName = "";
|
displayName = "";
|
||||||
model = "\A3\Weapons_f\empty";
|
model = "\A3\Weapons_f\empty";
|
||||||
picture = "";
|
picture = "";
|
||||||
|
@ -97,14 +97,16 @@ if (!hasInterface) exitWith {};
|
|||||||
call COMPILE_FILE(scripts\assignedItemFix);
|
call COMPILE_FILE(scripts\assignedItemFix);
|
||||||
call COMPILE_FILE(scripts\initScrollWheel);
|
call COMPILE_FILE(scripts\initScrollWheel);
|
||||||
|
|
||||||
0 spawn {
|
DFUNC(mouseZHandler) = {
|
||||||
while {true} do {
|
waitUntil {!isNull (findDisplay 46)}; sleep 0.1;
|
||||||
waitUntil {!isNull (findDisplay 46)}; sleep 0.1;
|
findDisplay 46 displayAddEventHandler ["MouseZChanged", QUOTE( _this call GVAR(onScrollWheel) )];
|
||||||
findDisplay 46 displayAddEventHandler ["MouseZChanged", QUOTE( _this call GVAR(onScrollWheel) )];
|
[false] call FUNC(disableUserInput);
|
||||||
[false] call FUNC(disableUserInput);
|
|
||||||
waitUntil {isNull (findDisplay 46)};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
addMissionEventHandler ["Loaded", {[] spawn FUNC(mouseZHandler)}];
|
||||||
|
[] spawn FUNC(mouseZHandler);
|
||||||
|
|
||||||
|
|
||||||
enableCamShake true;
|
enableCamShake true;
|
||||||
|
|
||||||
// Set the name for the current player
|
// Set the name for the current player
|
||||||
|
@ -22,6 +22,7 @@ class CfgPatches {
|
|||||||
#include "CfgActions.hpp"
|
#include "CfgActions.hpp"
|
||||||
#include "CfgMoves.hpp"
|
#include "CfgMoves.hpp"
|
||||||
#include "CfgVoice.hpp"
|
#include "CfgVoice.hpp"
|
||||||
|
#include "CfgUnitInsignia.hpp"
|
||||||
|
|
||||||
class ACE_Rsc_Display_Base {
|
class ACE_Rsc_Display_Base {
|
||||||
idd = -1;
|
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));
|
}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];
|
_unit setVariable ["ACE_forceWalkStatusNumber", _bitmaskNumber, true];
|
||||||
|
|
||||||
// actually apply the forceWalk command globaly
|
// 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>
|
<Russian>Выключить командное меню</Russian>
|
||||||
<Hungarian>Parancsnoki menü kikapcsolása</Hungarian>
|
<Hungarian>Parancsnoki menü kikapcsolása</Hungarian>
|
||||||
<Italian>Disabilita Menù di comando</Italian>
|
<Italian>Disabilita Menù di comando</Italian>
|
||||||
|
<Portuguese>Desabilitar menu de comando</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Common_Unknown">
|
<Key ID="STR_ACE_Common_Unknown">
|
||||||
<English>Unknown</English>
|
<English>Unknown</English>
|
||||||
@ -287,6 +288,7 @@
|
|||||||
<Hungarian>Ismeretlen</Hungarian>
|
<Hungarian>Ismeretlen</Hungarian>
|
||||||
<Italian>Sconosciuto</Italian>
|
<Italian>Sconosciuto</Italian>
|
||||||
<French>Inconnu</French>
|
<French>Inconnu</French>
|
||||||
|
<Portuguese>Desconhecido</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Common_NoVoice">
|
<Key ID="STR_ACE_Common_NoVoice">
|
||||||
<English>No Voice</English>
|
<English>No Voice</English>
|
||||||
@ -298,6 +300,7 @@
|
|||||||
<Hungarian>Nincs hang</Hungarian>
|
<Hungarian>Nincs hang</Hungarian>
|
||||||
<Italian>Senza voce</Italian>
|
<Italian>Senza voce</Italian>
|
||||||
<French>Pas de voix</French>
|
<French>Pas de voix</French>
|
||||||
|
<Portuguese>Sem voz</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TITLE">
|
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TITLE">
|
||||||
<English>Accept Requests</English>
|
<English>Accept Requests</English>
|
||||||
@ -309,6 +312,7 @@
|
|||||||
<French>Accepter requête</French>
|
<French>Accepter requête</French>
|
||||||
<Russian>Принять запросы</Russian>
|
<Russian>Принять запросы</Russian>
|
||||||
<Hungarian>Kérések elfogadása</Hungarian>
|
<Hungarian>Kérések elfogadása</Hungarian>
|
||||||
|
<Portuguese>Aceitar Pedido</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
|
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
|
||||||
<English>Decline Requests</English>
|
<English>Decline Requests</English>
|
||||||
@ -320,6 +324,7 @@
|
|||||||
<Russian>Отклонить запросы</Russian>
|
<Russian>Отклонить запросы</Russian>
|
||||||
<French>Rejeter requête</French>
|
<French>Rejeter requête</French>
|
||||||
<Hungarian>Kérések elutasítása</Hungarian>
|
<Hungarian>Kérések elutasítása</Hungarian>
|
||||||
|
<Portuguese>Rejeitar pedido</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP">
|
<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>
|
<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>
|
<Russian>Принять запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий</Russian>
|
||||||
<French>Accepter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions.</French>
|
<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>
|
<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>
|
||||||
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP">
|
<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>
|
<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>
|
<Russian>Отклонить запросы, отправленные другими игроками. Например, запросы на использование/совместное использование снаряжения, выполнение определенных действий</Russian>
|
||||||
<French>Rejeter les requêtes d'autres joueurs. Comme l'utilisation / l'échange d'équipement, la réalisation d'actions.</French>
|
<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>
|
<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>
|
||||||
<Key ID="STR_ACE_Common_SettingFeedbackIconsName">
|
<Key ID="STR_ACE_Common_SettingFeedbackIconsName">
|
||||||
<English>Feedback icons</English>
|
<English>Feedback icons</English>
|
||||||
@ -353,6 +360,7 @@
|
|||||||
<French>Icones d'information</French>
|
<French>Icones d'information</French>
|
||||||
<Czech>Pomocné ikony</Czech>
|
<Czech>Pomocné ikony</Czech>
|
||||||
<Hungarian>Visszajelző ikonok</Hungarian>
|
<Hungarian>Visszajelző ikonok</Hungarian>
|
||||||
|
<Portuguese>Ícones de Feedback</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Common_SettingFeedbackIconsDesc">
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
||||||
<Key ID="STR_ACE_Common_SettingProgressbarLocationName">
|
<Key ID="STR_ACE_Common_SettingProgressbarLocationName">
|
||||||
<English>Progress bar location</English>
|
<English>Progress bar location</English>
|
||||||
@ -375,28 +384,31 @@
|
|||||||
<French>Position de la barre de progression</French>
|
<French>Position de la barre de progression</French>
|
||||||
<Czech>Pozice ukazetele průběhu činnosti</Czech>
|
<Czech>Pozice ukazetele průběhu činnosti</Czech>
|
||||||
<Hungarian>Állapotjelző sáv helyzete</Hungarian>
|
<Hungarian>Állapotjelző sáv helyzete</Hungarian>
|
||||||
|
<Portuguese>Local da barra de progresso</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Common_SettingProgressbarLocationDesc">
|
<Key ID="STR_ACE_Common_SettingProgressbarLocationDesc">
|
||||||
<English>Set the desired location of the progress bar on your screen.</English>
|
<English>Set the desired location of the progress bar on your screen.</English>
|
||||||
<German>Setze die gewünschte Position der Fortschrittsanzeige fest.</German>
|
<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>
|
<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>
|
<Russian>Установите желаемое положение строки состояния на экране.</Russian>
|
||||||
<Polish>Ustaw pożądaną lokalizację paska postępu na ekranie</Polish>
|
<Polish>Ustaw pożądaną lokalizację paska postępu na ekranie</Polish>
|
||||||
<French>Appliquer la position de la barre de progression sur l'écran</French>
|
<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>
|
<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>
|
<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>
|
||||||
<Key ID="STR_ACE_Common_SettingDisplayTextColorName">
|
<Key ID="STR_ACE_Common_SettingDisplayTextColorName">
|
||||||
<English>Hint Background color</English>
|
<English>Hint Background color</English>
|
||||||
<German>Hintergrundfarbe der Hinweise</German>
|
<German>Hintergrundfarbe der Hinweise</German>
|
||||||
<Spanish>Color de fondo de las notificaciones</Spanish>
|
<Spanish>Color de fondo de las notificaciones</Spanish>
|
||||||
<Italian>Sfondo dei Suggerimenti</Italian>
|
<Italian>Colore di sfondo dei Suggerimenti</Italian>
|
||||||
<Russian>Цвет фона всплывающих подсказок</Russian>
|
<Russian>Цвет фона всплывающих подсказок</Russian>
|
||||||
<Polish>Kolor tła powiadomień</Polish>
|
<Polish>Kolor tła powiadomień</Polish>
|
||||||
<French>Notification: couleur de l'arrière plan</French>
|
<French>Notification: couleur de l'arrière plan</French>
|
||||||
<Czech>Barva pozadí nápovědy</Czech>
|
<Czech>Barva pozadí nápovědy</Czech>
|
||||||
<Hungarian>Súgó háttérszíne</Hungarian>
|
<Hungarian>Súgó háttérszíne</Hungarian>
|
||||||
|
<Portuguese>Cor do fundo da hint</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Common_SettingDisplayTextColorDesc">
|
<Key ID="STR_ACE_Common_SettingDisplayTextColorDesc">
|
||||||
<English>The color of the background from the ACE hints.</English>
|
<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>
|
<French>Notification ACE: couleur de l'arrière plan</French>
|
||||||
<Czech>Barva pozadí ACE nápověd.</Czech>
|
<Czech>Barva pozadí ACE nápověd.</Czech>
|
||||||
<Hungarian>Az ACE-súgók hátterének színe.</Hungarian>
|
<Hungarian>Az ACE-súgók hátterének színe.</Hungarian>
|
||||||
|
<Portuguese>A cor de fundo das hints do ACE.</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorName">
|
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorName">
|
||||||
<English>Hint text font color</English>
|
<English>Hint text font color</English>
|
||||||
<German>Textfarbe der Hinweise</German>
|
<German>Textfarbe der Hinweise</German>
|
||||||
<Spanish>Color del texto de las notificaciones</Spanish>
|
<Spanish>Color del texto de las notificaciones</Spanish>
|
||||||
<Italian>Testo dei Suggerimenti</Italian>
|
<Italian>Il colore del Testo dei Suggerimenti</Italian>
|
||||||
<Russian>Цвет шрифта всплывающих подсказок</Russian>
|
<Russian>Цвет шрифта всплывающих подсказок</Russian>
|
||||||
<Polish>Kolor tekstu powiadomień</Polish>
|
<Polish>Kolor tekstu powiadomień</Polish>
|
||||||
<French>Notification: couleur du texte</French>
|
<French>Notification: couleur du texte</French>
|
||||||
<Czech>Barva fontu nápověd.</Czech>
|
<Czech>Barva fontu nápověd.</Czech>
|
||||||
<Hungarian>Súgószöveg betűinek színe</Hungarian>
|
<Hungarian>Súgószöveg betűinek színe</Hungarian>
|
||||||
|
<Portuguese>Cor do do texto da hint</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorDesc">
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
||||||
<Key ID="STR_ACE_Common_bananaDisplayName">
|
<Key ID="STR_ACE_Common_bananaDisplayName">
|
||||||
<English>Banana</English>
|
<English>Banana</English>
|
||||||
@ -441,17 +456,19 @@
|
|||||||
<Polish>Banan</Polish>
|
<Polish>Banan</Polish>
|
||||||
<French>Banane</French>
|
<French>Banane</French>
|
||||||
<Hungarian>Banán</Hungarian>
|
<Hungarian>Banán</Hungarian>
|
||||||
|
<Portuguese>Banana</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Common_bananaDescr">
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<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>
|
<French>Une banane est un fruit qui, d'un point de vue botanique, fait partie du groupe des baies. Produite par plusieurs sortes de grandes plantes à fleurs herbacées du type Musa.</French>
|
||||||
|
<Portuguese>A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa.</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -60,7 +60,7 @@ GVAR(disarmTarget) = _target;
|
|||||||
|
|
||||||
//Setup PFEH
|
//Setup PFEH
|
||||||
[{
|
[{
|
||||||
private ["_groundContainer", "_targetContainer", "_playerName", "_rankPicture", "_rankIndex", "_targetUniqueItems", "_holderUniqueItems"];
|
private ["_groundContainer", "_targetContainer", "_playerName", "_rankPicture", "_rankIndex", "_targetUniqueItems", "_holderUniqueItems", "_holder"];
|
||||||
disableSerialization;
|
disableSerialization;
|
||||||
EXPLODE_2_PVT(_this,_args,_pfID);
|
EXPLODE_2_PVT(_this,_args,_pfID);
|
||||||
EXPLODE_3_PVT(_args,_player,_target,_display);
|
EXPLODE_3_PVT(_args,_player,_target,_display);
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
<Hungarian>Elhasznált kilövőcső</Hungarian>
|
<Hungarian>Elhasznált kilövőcső</Hungarian>
|
||||||
<Russian>Отстрелянная труба</Russian>
|
<Russian>Отстрелянная труба</Russian>
|
||||||
<Italian>Tubo utilizzato</Italian>
|
<Italian>Tubo utilizzato</Italian>
|
||||||
|
<Portuguese>Tubo utilizado</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Disposable_UsedTubeDescription">
|
<Key ID="STR_ACE_Disposable_UsedTubeDescription">
|
||||||
<English>Used disposable rocket launcher</English>
|
<English>Used disposable rocket launcher</English>
|
||||||
@ -22,6 +23,7 @@
|
|||||||
<Hungarian>Elhasznált eldobható rakétavető</Hungarian>
|
<Hungarian>Elhasznált eldobható rakétavető</Hungarian>
|
||||||
<Russian>Отстрелянная одноразовая пусковая установка</Russian>
|
<Russian>Отстрелянная одноразовая пусковая установка</Russian>
|
||||||
<Italian>Lanciarazzi monouso utilizzato</Italian>
|
<Italian>Lanciarazzi monouso utilizzato</Italian>
|
||||||
|
<Portuguese>Lança foguetes descartável utilizado</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Disposable_PreloadedMissileDummy">
|
<Key ID="STR_ACE_Disposable_PreloadedMissileDummy">
|
||||||
<English>Preloaded Missile Dummy</English>
|
<English>Preloaded Missile Dummy</English>
|
||||||
@ -33,6 +35,7 @@
|
|||||||
<Hungarian>Előtöltött műrakéta</Hungarian>
|
<Hungarian>Előtöltött műrakéta</Hungarian>
|
||||||
<Russian>Предзаряженная ракетная болванка</Russian>
|
<Russian>Предзаряженная ракетная болванка</Russian>
|
||||||
<Italian>Missile stupido precaricato</Italian>
|
<Italian>Missile stupido precaricato</Italian>
|
||||||
|
<Portuguese>Míssel dummy pré-carregado</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</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 "CfgEventHandlers.hpp"
|
||||||
#include "CfgVehicles.hpp"
|
#include "CfgVehicles.hpp"
|
||||||
|
#include "CfgMovesBasic.hpp"
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<Spanish>Arrastrar</Spanish>
|
<Spanish>Arrastrar</Spanish>
|
||||||
<Polish>Ciągnij</Polish>
|
<Polish>Ciągnij</Polish>
|
||||||
<Czech>Táhnout</Czech>
|
<Czech>Táhnout</Czech>
|
||||||
<French>Tracter</French>
|
<French>Trainer</French>
|
||||||
<German>Ziehen</German>
|
<German>Ziehen</German>
|
||||||
<Portuguese>Arrastar</Portuguese>
|
<Portuguese>Arrastar</Portuguese>
|
||||||
<Italian>Trascina</Italian>
|
<Italian>Trascina</Italian>
|
||||||
@ -21,7 +21,7 @@
|
|||||||
<Czech>Položit</Czech>
|
<Czech>Položit</Czech>
|
||||||
<French>Lâcher</French>
|
<French>Lâcher</French>
|
||||||
<German>Loslassen</German>
|
<German>Loslassen</German>
|
||||||
<Portuguese>Largar</Portuguese>
|
<Portuguese>Soltar</Portuguese>
|
||||||
<Italian>Lascia</Italian>
|
<Italian>Lascia</Italian>
|
||||||
<Hungarian>Elengedés</Hungarian>
|
<Hungarian>Elengedés</Hungarian>
|
||||||
</Key>
|
</Key>
|
||||||
|
@ -37,7 +37,7 @@ player addEventHandler ["Killed", {
|
|||||||
} count _deadman;
|
} count _deadman;
|
||||||
}];
|
}];
|
||||||
player addEventHandler ["Take", {
|
player addEventHandler ["Take", {
|
||||||
private ["_item", "_getter", "_giver", "_config"];
|
private ["_item", "_getter", "_giver", "_config", "_detonators"];
|
||||||
_item = _this select 2;
|
_item = _this select 2;
|
||||||
_getter = _this select 0;
|
_getter = _this select 0;
|
||||||
_giver = _this select 1;
|
_giver = _this select 1;
|
||||||
|
@ -17,7 +17,11 @@
|
|||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
EXPLODE_4_PVT(_this,_unit,_explosive,_magazineClass,_extra);
|
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 is the last item in the list of passed in items.
|
||||||
_config = (_this select 3) select (count (_this select 3) - 1);
|
_config = (_this select 3) select (count (_this select 3) - 1);
|
||||||
|
|
||||||
@ -29,7 +33,7 @@ _detonators = [_unit] call FUNC(getDetonators);
|
|||||||
_hasRequired = false;
|
_hasRequired = false;
|
||||||
};
|
};
|
||||||
} count _requiredItems;
|
} count _requiredItems;
|
||||||
private ["_code", "_count", "_codeSet"];
|
|
||||||
_codeSet = false;
|
_codeSet = false;
|
||||||
while {!_codeSet} do {
|
while {!_codeSet} do {
|
||||||
_code = str(round (random 9999));
|
_code = str(round (random 9999));
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_clacker", "_config", "_requiredItems", "_hasRequired"];
|
private ["_clacker", "_config", "_requiredItems", "_hasRequired", "_detonators"];
|
||||||
EXPLODE_3_PVT(_this,_unit,_explosive,_magazineClass);
|
EXPLODE_3_PVT(_this,_unit,_explosive,_magazineClass);
|
||||||
// Config is the last item in the list of passed in items.
|
// Config is the last item in the list of passed in items.
|
||||||
_config = (_this select 3) select (count (_this select 3) - 1);
|
_config = (_this select 3) select (count (_this select 3) - 1);
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_result", "_item", "_children"];
|
private ["_result", "_item", "_children", "_range", "_required"];
|
||||||
|
|
||||||
EXPLODE_2_PVT(_this,_unit,_detonator);
|
EXPLODE_2_PVT(_this,_unit,_detonator);
|
||||||
_range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range");
|
_range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range");
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_mags", "_item", "_index", "_children"];
|
private ["_mags", "_item", "_index", "_children", "_itemCount", "_list"];
|
||||||
|
|
||||||
EXPLODE_1_PVT(_this,_unit);
|
EXPLODE_1_PVT(_this,_unit);
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_items", "_unit", "_children", "_config"];
|
private ["_unit", "_children", "_config", "_detonators"];
|
||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
_detonators = [_unit] call FUNC(getDetonators);
|
_detonators = [_unit] call FUNC(getDetonators);
|
||||||
_children = [];
|
_children = [];
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_hasRequiredItems","_triggerTypes", "_children",
|
private ["_hasRequiredItems","_triggerTypes", "_children", "_detonators", "_required", "_magTriggers"];
|
||||||
"_detonators", "_required", "_magTriggers"];
|
|
||||||
EXPLODE_2_PVT(_this,_magazine,_explosive);
|
EXPLODE_2_PVT(_this,_magazine,_explosive);
|
||||||
_detonators = [ACE_player] call FUNC(getDetonators);
|
_detonators = [ACE_player] call FUNC(getDetonators);
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_specialist"];
|
private ["_isSpecialist"];
|
||||||
EXPLODE_2_PVT(_this,_unit,_target);
|
EXPLODE_2_PVT(_this,_unit,_target);
|
||||||
if (isNull(_target getVariable [QGVAR(Explosive),objNull])) exitWith {
|
if (isNull(_target getVariable [QGVAR(Explosive),objNull])) exitWith {
|
||||||
deleteVehicle _target;
|
deleteVehicle _target;
|
||||||
|
@ -19,18 +19,18 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_result", "_ignoreRange", "_helper"];
|
private ["_result", "_ignoreRange", "_helpers", "_pos"];
|
||||||
EXPLODE_3_PVT(_this,_unit,_range,_item);
|
EXPLODE_3_PVT(_this,_unit,_range,_item);
|
||||||
_ignoreRange = (_range == -1);
|
_ignoreRange = (_range == -1);
|
||||||
_result = true;
|
_result = true;
|
||||||
|
|
||||||
if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {false};
|
if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {false};
|
||||||
|
|
||||||
_helper = (attachedTo (_item select 0));
|
_helpers = attachedObjects (_item select 0);
|
||||||
if (!isNull(_helper)) then {
|
{
|
||||||
detach (_item select 0);
|
detach _x;
|
||||||
deleteVehicle _helper;
|
deleteVehicle _x;
|
||||||
};
|
} forEach _helpers;
|
||||||
|
|
||||||
if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhenDestroyed") == 0) then {
|
if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhenDestroyed") == 0) then {
|
||||||
private ["_exp", "_previousExp"];
|
private ["_exp", "_previousExp"];
|
||||||
@ -46,10 +46,11 @@ if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhe
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
[{
|
[{
|
||||||
_explosive = _this;
|
private ["_explosive"];
|
||||||
if (!isNull _explosive) then {
|
_explosive = _this;
|
||||||
_explosive setDamage 1;
|
if (!isNull _explosive) then {
|
||||||
};
|
_explosive setDamage 1;
|
||||||
|
};
|
||||||
}, _item select 0, _item select 1, 0] call EFUNC(common,waitAndExecute);
|
}, _item select 0, _item select 1, 0] call EFUNC(common,waitAndExecute);
|
||||||
|
|
||||||
_result
|
_result
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_arr", "_ran", "_i","_speedDial"];
|
private ["_arr", "_ran", "_i"];
|
||||||
EXPLODE_2_PVT(_this,_unit,_code);
|
EXPLODE_2_PVT(_this,_unit,_code);
|
||||||
if (_unit getVariable [QGVAR(Dialing),false]) exitWith {};
|
if (_unit getVariable [QGVAR(Dialing),false]) exitWith {};
|
||||||
if !(alive _unit) exitWith {};
|
if !(alive _unit) exitWith {};
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
// IGNORE_PRIVATE_WARNING(_detonators);
|
||||||
|
|
||||||
private ["_unit", "_items", "_result", "_config"];
|
private ["_unit", "_items", "_result", "_config"];
|
||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
_items = (items _unit);
|
_items = (items _unit);
|
||||||
@ -21,7 +23,7 @@ _result = [];
|
|||||||
|
|
||||||
{
|
{
|
||||||
_config = ConfigFile >> "CfgWeapons" >> _x;
|
_config = ConfigFile >> "CfgWeapons" >> _x;
|
||||||
if (getNumber (_config >> "ACE_Detonator") == 1) then {
|
if (getNumber (_config >> "ACE_Detonator") == 1 && {!(_x in _result)}) then {
|
||||||
_result pushBack _x;
|
_result pushBack _x;
|
||||||
};
|
};
|
||||||
} forEach _items;
|
} forEach _items;
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
// IGNORE_PRIVATE_WARNING(_allExplosives,_deadmanExplosives);
|
||||||
|
|
||||||
private ["_unit", "_clackerList", "_adjustedList", "_list", "_filter"];
|
private ["_unit", "_clackerList", "_adjustedList", "_list", "_filter"];
|
||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
_filter = nil;
|
_filter = nil;
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
// IGNORE_PRIVATE_WARNING(_hasExplosives);
|
||||||
|
|
||||||
private ["_unit", "_result", "_magazines"];
|
private ["_unit", "_result", "_magazines"];
|
||||||
_result = false;
|
_result = false;
|
||||||
_unit = _this select 0;
|
_unit = _this select 0;
|
||||||
|
@ -14,4 +14,6 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
// IGNORE_PRIVATE_WARNING(_hasPlacedExplosives);
|
||||||
|
|
||||||
(count (_this call FUNC(getPlacedExplosives)) > 0)
|
(count (_this call FUNC(getPlacedExplosives)) > 0)
|
||||||
|
@ -15,6 +15,9 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
if !(isServer) exitWith {};
|
if !(isServer) exitWith {};
|
||||||
|
|
||||||
|
private["_activated", "_logic"];
|
||||||
|
|
||||||
_logic = _this select 0;
|
_logic = _this select 0;
|
||||||
_activated = _this select 2;
|
_activated = _this select 2;
|
||||||
|
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* Author: Garth 'L-H' de Wet
|
* Author: Garth 'L-H' de Wet
|
||||||
|
* Handles the "EpeContactStart" event when placing the explosive.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
|
* 0: Explosive Placing Object <OBJECT>
|
||||||
|
* 1: Colliding Object <OBJECT>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
@ -14,19 +17,23 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
EXPLODE_2_PVT(_this,_explosive,_hitTarget);
|
EXPLODE_2_PVT(_this,_explosive,_hitTarget);
|
||||||
|
|
||||||
|
TRACE_2("Explosive EpeContactStart",_explosive,_hitTarget);
|
||||||
|
|
||||||
if ((_explosive getVariable [QGVAR(Handled), false])) exitWith {};
|
if ((_explosive getVariable [QGVAR(Handled), false])) exitWith {};
|
||||||
|
|
||||||
_explosive setVariable [QGVAR(Handled), true];
|
_explosive setVariable [QGVAR(Handled), true];
|
||||||
if (!isNull _hitTarget && {_hitTarget isKindOf "AllVehicles"}) then {
|
if (!isNull _hitTarget && {_hitTarget isKindOf "AllVehicles"}) then {
|
||||||
|
TRACE_1("Attaching to",_hitTarget);
|
||||||
_explosive attachTo [_hitTarget];
|
_explosive attachTo [_hitTarget];
|
||||||
private "_dir";
|
private "_dir";
|
||||||
_dir = _setup getVariable [QGVAR(Direction), 0];
|
_dir = _explosive getVariable [QGVAR(Direction), 0];
|
||||||
_dir = _dir - (getDir _hitTarget);
|
_dir = _dir - (getDir _hitTarget);
|
||||||
[[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc);
|
[[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc);
|
||||||
} else {
|
} else {
|
||||||
[{
|
[{
|
||||||
EXPLODE_2_PVT(_this,_player,_explosive);
|
EXPLODE_2_PVT(_this,_player,_explosive);
|
||||||
private "_pos";
|
private "_pos";
|
||||||
|
_pos = getPosASL _explosive;
|
||||||
if (surfaceIsWater _pos) then {
|
if (surfaceIsWater _pos) then {
|
||||||
_pos = getPosASL _explosive;
|
_pos = getPosASL _explosive;
|
||||||
_explosive setPosASL _pos;
|
_explosive setPosASL _pos;
|
||||||
|
@ -21,10 +21,14 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_ammo", "_explosive"];
|
private ["_ammo", "_explosive", "_attachedTo", "_expPos", "_magazineTrigger"];
|
||||||
EXPLODE_6_PVT(_this,_unit,_pos,_dir,_magazineClass,_triggerConfig,_triggerSpecificVars);
|
EXPLODE_6_PVT(_this,_unit,_pos,_dir,_magazineClass,_triggerConfig,_triggerSpecificVars);
|
||||||
if (count _this > 6) then {
|
DEFAULT_PARAM(6,_setupPlaceholderObject,objNull);
|
||||||
deleteVehicle (_this select 6);
|
|
||||||
|
_attachedTo = objNull;
|
||||||
|
if (!isNull _setupPlaceholderObject) then {
|
||||||
|
_attachedTo = attachedTo _setupPlaceholderObject;
|
||||||
|
deleteVehicle _setupPlaceholderObject;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (isNil "_triggerConfig") exitWith {
|
if (isNil "_triggerConfig") exitWith {
|
||||||
@ -57,6 +61,11 @@ _expPos = getPosATL _explosive;
|
|||||||
_defuseHelper setPosATL (((getPosATL _defuseHelper) vectorAdd (_pos vectorDiff _expPos)));
|
_defuseHelper setPosATL (((getPosATL _defuseHelper) vectorAdd (_pos vectorDiff _expPos)));
|
||||||
_explosive setPosATL _pos;
|
_explosive setPosATL _pos;
|
||||||
|
|
||||||
|
if (!isNull _attachedTo) then {
|
||||||
|
TRACE_1("Attaching Live Explosive",_attachedTo);
|
||||||
|
_explosive attachTo [_attachedTo];
|
||||||
|
};
|
||||||
|
|
||||||
if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars]
|
if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars]
|
||||||
call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive};
|
call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive};
|
||||||
[[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc);
|
[[_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);
|
[QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler);
|
||||||
GVAR(pfeh_running) = false;
|
GVAR(pfeh_running) = false;
|
||||||
};
|
};
|
||||||
private ["_mag", "_setup", "_player"];
|
private ["_setup", "_player", "_dir"];
|
||||||
_setup = GVAR(Setup);
|
_setup = GVAR(Setup);
|
||||||
GVAR(Setup) = objNull;
|
GVAR(Setup) = objNull;
|
||||||
[GVAR(placer), "ACE_Explosives", false] call EFUNC(Common,setForceWalkStatus);
|
[GVAR(placer), "ACE_Explosives", false] call EFUNC(Common,setForceWalkStatus);
|
||||||
|
@ -28,7 +28,7 @@ GVAR(Setup) setVariable [QGVAR(class), _class, true];
|
|||||||
GVAR(TweakedAngle) = 180;
|
GVAR(TweakedAngle) = 180;
|
||||||
|
|
||||||
[QGVAR(Placement),"OnEachFrame", {
|
[QGVAR(Placement),"OnEachFrame", {
|
||||||
private "_player";
|
private ["_player", "_pos"];
|
||||||
_player = ACE_player;
|
_player = ACE_player;
|
||||||
if (GVAR(placer) != _player) exitWith {
|
if (GVAR(placer) != _player) exitWith {
|
||||||
call FUNC(place_Cancel);
|
call FUNC(place_Cancel);
|
||||||
|
@ -16,11 +16,14 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
EXPLODE_2_PVT(_this,_unit,_target);
|
EXPLODE_2_PVT(_this,_unit,_target);
|
||||||
|
|
||||||
|
private["_actionToPlay"];
|
||||||
|
|
||||||
_target = attachedTo (_target);
|
_target = attachedTo (_target);
|
||||||
|
|
||||||
_fnc_DefuseTime = {
|
_fnc_DefuseTime = {
|
||||||
EXPLODE_2_PVT(_this,_specialist,_target);
|
EXPLODE_2_PVT(_this,_specialist,_target);
|
||||||
|
private ["_defuseTime"];
|
||||||
_defuseTime = 5;
|
_defuseTime = 5;
|
||||||
if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then {
|
if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then {
|
||||||
_defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime");
|
_defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime");
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
EXPLODE_2_PVT(_this,_explosive,_delay);
|
EXPLODE_2_PVT(_this,_explosive,_delay);
|
||||||
|
|
||||||
[{
|
[{
|
||||||
|
private ["_explosive"];
|
||||||
_explosive = _this;
|
_explosive = _this;
|
||||||
if (!isNull _explosive) then {
|
if (!isNull _explosive) then {
|
||||||
[_explosive, -1, [_explosive, 0]] call FUNC(detonateExplosive);
|
[_explosive, -1, [_explosive, 0]] call FUNC(detonateExplosive);
|
||||||
|
@ -14,7 +14,10 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private "_result";
|
|
||||||
|
private["_result", "_config", "_count", "_index", "_supports"];
|
||||||
|
// IGNORE_PRIVATE_WARNING(_supports);
|
||||||
|
|
||||||
_result = [];
|
_result = [];
|
||||||
_config = getArray (ConfigFile >> "CfgMagazines" >> (_this select 0) >> "ACE_Triggers" >> "SupportedTriggers");
|
_config = getArray (ConfigFile >> "CfgMagazines" >> (_this select 0) >> "ACE_Triggers" >> "SupportedTriggers");
|
||||||
_count = count _config;
|
_count = count _config;
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#define COMPONENT explosives
|
#define COMPONENT explosives
|
||||||
#include "\z\ace\addons\main\script_mod.hpp"
|
#include "\z\ace\addons\main\script_mod.hpp"
|
||||||
|
|
||||||
|
// #define DEBUG_MODE_FULL
|
||||||
|
|
||||||
#ifdef DEBUG_ENABLED_EXPLOSIVES
|
#ifdef DEBUG_ENABLED_EXPLOSIVES
|
||||||
#define DEBUG_MODE_FULL
|
#define DEBUG_MODE_FULL
|
||||||
#endif
|
#endif
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
<German>Sprengstoffcode: %1</German>
|
<German>Sprengstoffcode: %1</German>
|
||||||
<Spanish>Código del explosivo: %1</Spanish>
|
<Spanish>Código del explosivo: %1</Spanish>
|
||||||
<Polish>Kod ładunku: %1</Polish>
|
<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>
|
<Czech>Kód výbušniny: %1</Czech>
|
||||||
<Hungarian>Robbanóanyag kódja: %1</Hungarian>
|
<Hungarian>Robbanóanyag kódja: %1</Hungarian>
|
||||||
<Portuguese>Código do explosivo: %1</Portuguese>
|
<Portuguese>Código do explosivo: %1</Portuguese>
|
||||||
@ -222,7 +222,7 @@
|
|||||||
<German>Löschen</German>
|
<German>Löschen</German>
|
||||||
<Spanish>Borrar</Spanish>
|
<Spanish>Borrar</Spanish>
|
||||||
<Polish>Usuń</Polish>
|
<Polish>Usuń</Polish>
|
||||||
<French>Désamorçé</French>
|
<French>Effacer</French>
|
||||||
<Czech>Čistý</Czech>
|
<Czech>Čistý</Czech>
|
||||||
<Italian>Libera</Italian>
|
<Italian>Libera</Italian>
|
||||||
<Hungarian>Törlés</Hungarian>
|
<Hungarian>Törlés</Hungarian>
|
||||||
@ -477,7 +477,9 @@
|
|||||||
<Polish>Czuwak</Polish>
|
<Polish>Czuwak</Polish>
|
||||||
<Spanish>Detonador de hombre muerto</Spanish>
|
<Spanish>Detonador de hombre muerto</Spanish>
|
||||||
<Hungarian>Dead Man's Switch</Hungarian>
|
<Hungarian>Dead Man's Switch</Hungarian>
|
||||||
|
<Portuguese>Detonador do homem morto</Portuguese>
|
||||||
<Russian>Кнопка мертвеца</Russian>
|
<Russian>Кнопка мертвеца</Russian>
|
||||||
|
<Italian>Detonatore a rilascio</Italian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Explosives_DeadManSwitch_description">
|
<Key ID="STR_ACE_Explosives_DeadManSwitch_description">
|
||||||
<English>Used to remotely trigger explosives when released.</English>
|
<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>
|
<Czech>Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny</Czech>
|
||||||
<Polish>Używany w celu zdalnej detonacji ładunków, kiedy jego operator zostanie zabity.</Polish>
|
<Polish>Używany w celu zdalnej detonacji ładunków, kiedy jego operator zostanie zabity.</Polish>
|
||||||
<Spanish>Utilizado para detonar explosivos remotamente al soltarlo.</Spanish>
|
<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>
|
<Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian>
|
||||||
<Italian>Usato per attivare esplosivi quando rilasciato</Italian>
|
<Italian>Usato per attivare esplosivi al momento del rilascio</Italian>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Explosives_Pickup">
|
<Key ID="STR_ACE_Explosives_Pickup">
|
||||||
<English>Pick up</English>
|
<English>Pick up</English>
|
||||||
@ -500,6 +503,7 @@
|
|||||||
<Hungarian>Felszedés</Hungarian>
|
<Hungarian>Felszedés</Hungarian>
|
||||||
<Russian>Поднять</Russian>
|
<Russian>Поднять</Russian>
|
||||||
<Italian>Raccogli</Italian>
|
<Italian>Raccogli</Italian>
|
||||||
|
<Portuguese>Pegar</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
<Spanish>Iluminar objetivo / Medir distancia</Spanish>
|
<Spanish>Iluminar objetivo / Medir distancia</Spanish>
|
||||||
<Russian>Подсветить цель / Замерить расстояние</Russian>
|
<Russian>Подсветить цель / Замерить расстояние</Russian>
|
||||||
<Hungarian>Célpont lézerezése / Távolság Bemérése</Hungarian>
|
<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>
|
||||||
<Key ID="STR_ACE_FCS_ZeroedTo">
|
<Key ID="STR_ACE_FCS_ZeroedTo">
|
||||||
<English>Zeroed To</English>
|
<English>Zeroed To</English>
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Edited with tabler. -->
|
|
||||||
<Project name="ACE">
|
<Project name="ACE">
|
||||||
<Package name="FlashSuppressors">
|
<Package name="FlashSuppressors">
|
||||||
<Key ID="STR_ACE_muzzle_mzls_H">
|
<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,109 +6,190 @@ class CfgAmmo {
|
|||||||
//class ace_arty_105mm_m1_m782_time;
|
//class ace_arty_105mm_m1_m782_time;
|
||||||
//class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {};
|
//class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {};
|
||||||
//class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox {
|
//class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox {
|
||||||
// ACE_FRAG_SKIP = 1;
|
// GVAR(skip) = 1;
|
||||||
//};
|
//};
|
||||||
class Bo_GBU12_LGB;
|
class Bo_GBU12_LGB;
|
||||||
class Nou_GBU12 : Bo_GBU12_LGB {
|
class ACE_GBU12 : Bo_GBU12_LGB {
|
||||||
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||||
ACE_FRAG_METAL = 140000;
|
GVAR(metal) = 140000;
|
||||||
ACE_FRAG_CHARGE = 87000;
|
GVAR(charge) = 87000;
|
||||||
ACE_FRAG_GURNEY_C = 2320;
|
GVAR(gurney_c) = 2320;
|
||||||
ACE_FRAG_GURNEY_K = 1/2;
|
GVAR(gurney_k) = 1/2;
|
||||||
sideAirFriction = 0.04;
|
sideAirFriction = 0.04;
|
||||||
airFriction = 0.04;
|
airFriction = 0.04;
|
||||||
laserLock = 0;
|
laserLock = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GrenadeBase;
|
class GrenadeBase;
|
||||||
class Grenade;
|
class Grenade;
|
||||||
class GrenadeHand: Grenade {
|
class GrenadeHand: Grenade {
|
||||||
ACE_FRAG_SKIP = 0;
|
GVAR(skip) = 0;
|
||||||
ACE_FRAG_FORCE = 1;
|
GVAR(force) = 1;
|
||||||
// This is a good high-drag frag type for grenades.
|
// This is a good high-drag frag type for grenades.
|
||||||
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
|
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
|
||||||
/*
|
/*
|
||||||
These values are based on the M67 Grenade, should be tweaked for
|
These values are based on the M67 Grenade, should be tweaked for
|
||||||
individual grenades.
|
individual grenades.
|
||||||
*/
|
*/
|
||||||
ACE_FRAG_METAL = 210; // metal in grams
|
GVAR(metal) = 210; // metal in grams
|
||||||
ACE_FRAG_CHARGE = 185; // explosive in grams
|
GVAR(charge) = 185; // explosive in grams
|
||||||
ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
|
GVAR(gurney_c) = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||||
ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
GVAR(gurney_k) = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
|
||||||
};
|
};
|
||||||
class GrenadeHand_stone: GrenadeHand {
|
class GrenadeHand_stone: GrenadeHand {
|
||||||
ACE_FRAG_SKIP = 1;
|
GVAR(skip) = 1;
|
||||||
};
|
};
|
||||||
class SmokeShell: GrenadeHand {
|
class SmokeShell: GrenadeHand {
|
||||||
ACE_FRAG_SKIP = 1;
|
GVAR(skip) = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RocketBase;
|
class RocketBase;
|
||||||
//class R_Hydra_HE: RocketBase {
|
class R_Hydra_HE: RocketBase {
|
||||||
// ACE_FRAG_SKIP = 1;
|
// Source: http://fas.org/man/dod-101/sys/missile/hydra-70.htm
|
||||||
//};
|
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
|
||||||
|
GVAR(metal) = 3850;
|
||||||
//class R_57mm_HE: RocketBase {
|
GVAR(charge) = 1040;
|
||||||
// ACE_FRAG_SKIP = 1;
|
GVAR(gurney_c) = 2700;
|
||||||
//};
|
GVAR(gurney_k) = 1/2;
|
||||||
|
|
||||||
class R_80mm_HE: RocketBase {
|
|
||||||
ACE_FRAG_SKIP = 1;
|
|
||||||
};
|
};
|
||||||
|
//class R_57mm_HE: RocketBase {
|
||||||
//class R_S8T_AT: RocketBase {
|
// GVAR(skip) = 1;
|
||||||
// ACE_FRAG_SKIP = 1;
|
|
||||||
//};
|
//};
|
||||||
|
|
||||||
|
class R_80mm_HE: RocketBase {
|
||||||
|
GVAR(skip) = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
//class R_S8T_AT: RocketBase {
|
||||||
|
// GVAR(skip) = 1;
|
||||||
|
//};
|
||||||
|
|
||||||
class BombCore;
|
class BombCore;
|
||||||
class Bo_Mk82: BombCore {
|
class Bo_Mk82: BombCore {
|
||||||
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
|
||||||
ACE_FRAG_METAL = 140000;
|
GVAR(metal) = 140000;
|
||||||
ACE_FRAG_CHARGE = 87000;
|
GVAR(charge) = 87000;
|
||||||
ACE_FRAG_GURNEY_C = 2320;
|
GVAR(gurney_c) = 2320;
|
||||||
ACE_FRAG_GURNEY_K = 1/2;
|
GVAR(gurney_k) = 1/2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class G_40mm_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 {
|
class G_40mm_HE: GrenadeBase {
|
||||||
ACE_FRAG_SKIP = 0;
|
// Source: http://www.inetres.com/gp/military/infantry/grenade/40mm_ammo.html#M441
|
||||||
ACE_FRAG_FORCE = 1;
|
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 {
|
class ACE_G_40mm_HEDP: G_40mm_HEDP {
|
||||||
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_HE: ACE_G_40mm_HEDP {
|
class ACE_G_40mm_HE: G_40mm_HE {
|
||||||
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_Practice: ACE_G_40mm_HE {
|
class ACE_G_40mm_Practice: ACE_G_40mm_HE {
|
||||||
ACE_FRAG_SKIP = 1;
|
GVAR(skip) = 1;
|
||||||
};
|
};
|
||||||
class ACE_G40mm_HE_VOG25P: G_40mm_HE {
|
class ACE_G40mm_HE_VOG25P: G_40mm_HE {
|
||||||
ACE_FRAG_SKIP = 0;
|
GVAR(skip) = 0;
|
||||||
ACE_FRAG_FORCE = 1;
|
GVAR(force) = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// curator ammo entries
|
||||||
|
class 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_SMAW_HEDP;
|
||||||
//class R_MEEWS_HEDP : R_SMAW_HEDP {
|
//class R_MEEWS_HEDP : R_SMAW_HEDP {
|
||||||
// ACE_FRAG_FORCE = 1;
|
// GVAR(force) = 1;
|
||||||
// ACE_FRAG_MULTIPLIER = 1.2;
|
// GVAR(multiplier) = 1.2;
|
||||||
//};
|
//};
|
||||||
|
|
||||||
//class MissileBase;
|
class MissileBase;
|
||||||
//class M_Hellfire_AT: MissileBase {
|
class Missile_AGM_02_F : MissileBase {
|
||||||
// ACE_FRAG_FORCE = 1;
|
// Source: http://fas.org/man/dod-101/sys/smart/agm-65.htm
|
||||||
// ACE_FRAG_MULTIPLIER = 1.75;
|
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;
|
class B_762x51_Ball;
|
||||||
class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement?
|
class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement?
|
||||||
@ -263,51 +344,51 @@ class CfgAmmo {
|
|||||||
bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35};
|
bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35};
|
||||||
bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167};
|
bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167};
|
||||||
supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35};
|
supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35};
|
||||||
supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135};
|
supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135};
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class B_65x39_Caseless;
|
class B_65x39_Caseless;
|
||||||
class ACE_frag_base: B_65x39_Caseless {
|
class ACE_frag_base: B_65x39_Caseless {
|
||||||
timeToLive = 12;
|
timeToLive = 12;
|
||||||
typicalSpeed = 1500;
|
typicalSpeed = 1500;
|
||||||
deflecting = 65;
|
deflecting = 65;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_tiny: ACE_frag_base {
|
class ACE_frag_tiny: ACE_frag_base {
|
||||||
hit = 6;
|
hit = 6;
|
||||||
airFriction = BASE_DRAG;
|
airFriction = BASE_DRAG;
|
||||||
caliber = 0.75;
|
caliber = 0.75;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_tiny_HD: ACE_frag_base {
|
class ACE_frag_tiny_HD: ACE_frag_base {
|
||||||
hit = 6;
|
hit = 6;
|
||||||
airFriction = BASE_DRAG_HD;
|
airFriction = BASE_DRAG_HD;
|
||||||
caliber = 0.75;
|
caliber = 0.75;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_small: ACE_frag_base {
|
class ACE_frag_small: ACE_frag_base {
|
||||||
hit = 12;
|
hit = 12;
|
||||||
airFriction = BASE_DRAG*0.9;
|
airFriction = BASE_DRAG*0.9;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_small_HD: ACE_frag_base {
|
class ACE_frag_small_HD: ACE_frag_base {
|
||||||
hit = 12;
|
hit = 12;
|
||||||
airFriction = BASE_DRAG_HD*0.9;
|
airFriction = BASE_DRAG_HD*0.9;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_medium: ACE_frag_base {
|
class ACE_frag_medium: ACE_frag_base {
|
||||||
hit = 14;
|
hit = 14;
|
||||||
airFriction = BASE_DRAG*0.75;
|
airFriction = BASE_DRAG*0.75;
|
||||||
caliber = 1.2;
|
caliber = 1.2;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_medium_HD: ACE_frag_base {
|
class ACE_frag_medium_HD: ACE_frag_base {
|
||||||
hit = 14;
|
hit = 14;
|
||||||
airFriction = BASE_DRAG_HD*0.75;
|
airFriction = BASE_DRAG_HD*0.75;
|
||||||
caliber = 1.2;
|
caliber = 1.2;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_large: ACE_frag_base {
|
class ACE_frag_large: ACE_frag_base {
|
||||||
hit = 28;
|
hit = 28;
|
||||||
indirectHit = 2;
|
indirectHit = 2;
|
||||||
@ -315,19 +396,19 @@ class CfgAmmo {
|
|||||||
airFriction = BASE_DRAG*0.65;
|
airFriction = BASE_DRAG*0.65;
|
||||||
caliber = 2;
|
caliber = 2;
|
||||||
explosive = 0;
|
explosive = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_large_HD: ACE_frag_large {
|
class ACE_frag_large_HD: ACE_frag_large {
|
||||||
hit = 28;
|
hit = 28;
|
||||||
indirectHit = 2;
|
indirectHit = 2;
|
||||||
indirectHitRange = 0.25;
|
indirectHitRange = 0.25;
|
||||||
airFriction = BASE_DRAG_HD*0.65;
|
airFriction = BASE_DRAG_HD*0.65;
|
||||||
caliber = 2;
|
caliber = 2;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_huge: ACE_frag_large {
|
class ACE_frag_huge: ACE_frag_large {
|
||||||
hit = 40;
|
hit = 40;
|
||||||
indirectHit = 4;
|
indirectHit = 4;
|
||||||
@ -335,7 +416,7 @@ class CfgAmmo {
|
|||||||
airFriction = BASE_DRAG*0.5;
|
airFriction = BASE_DRAG*0.5;
|
||||||
caliber = 2.8;
|
caliber = 2.8;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_huge_HD: ACE_frag_large {
|
class ACE_frag_huge_HD: ACE_frag_large {
|
||||||
hit = 40;
|
hit = 40;
|
||||||
indirectHit = 4;
|
indirectHit = 4;
|
||||||
@ -343,19 +424,19 @@ class CfgAmmo {
|
|||||||
airFriction = BASE_DRAG_HD*0.5;
|
airFriction = BASE_DRAG_HD*0.5;
|
||||||
caliber = 2.8;
|
caliber = 2.8;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_spall_small: ACE_frag_small {
|
class ACE_frag_spall_small: ACE_frag_small {
|
||||||
timeToLive = 0.1;
|
timeToLive = 0.1;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_spall_medium: ACE_frag_medium {
|
class ACE_frag_spall_medium: ACE_frag_medium {
|
||||||
timeToLive = 0.15;
|
timeToLive = 0.15;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_spall_large: ACE_frag_large {
|
class ACE_frag_spall_large: ACE_frag_large {
|
||||||
timeToLive = 0.25;
|
timeToLive = 0.25;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ACE_frag_spall_huge: ACE_frag_huge {
|
class ACE_frag_spall_huge: ACE_frag_huge {
|
||||||
timeToLive = 0.3;
|
timeToLive = 0.3;
|
||||||
};
|
};
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
class Extended_PreInit_EventHandlers {
|
class Extended_PreInit_EventHandlers {
|
||||||
class ADDON {
|
class ADDON {
|
||||||
init = QUOTE(call COMPILE_FILE(XEH_pre_init));
|
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class Extended_PostInit_EventHandlers {
|
class Extended_PostInit_EventHandlers {
|
||||||
class ADDON {
|
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"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
|
||||||
ADDON = false;
|
ADDON = false;
|
||||||
|
|
||||||
|
PREP(doSpall);
|
||||||
PREP(fired);
|
PREP(fired);
|
||||||
PREP(frago);
|
PREP(frago);
|
||||||
PREP(trackFragRound);
|
|
||||||
PREP(spallTrack);
|
PREP(spallTrack);
|
||||||
PREP(doSpall);
|
PREP(trackFragRound);
|
||||||
PREP(vectorDiffFast);
|
|
||||||
|
|
||||||
GVAR(trackedObjects) = [];
|
|
||||||
GVAR(blackList) = [];
|
GVAR(blackList) = [];
|
||||||
GVAR(traceFrags) = false;
|
GVAR(traceFrags) = false;
|
||||||
|
GVAR(trackedObjects) = [];
|
||||||
GVAR(replacedBisArtyWrapper) = true;
|
|
||||||
|
|
||||||
GVAR(TOTALFRAGS) = 0;
|
GVAR(TOTALFRAGS) = 0;
|
||||||
|
|
||||||
GVAR(spallIsTrackingCount) = 0;
|
|
||||||
GVAR(spallHPData) = [];
|
GVAR(spallHPData) = [];
|
||||||
|
GVAR(spallIsTrackingCount) = 0;
|
||||||
|
|
||||||
|
GVAR(autoTrace) = true;
|
||||||
|
GVAR(traceID) = -1;
|
||||||
GVAR(traces) = [];
|
GVAR(traces) = [];
|
||||||
GVAR(tracesStarted) = false;
|
GVAR(tracesStarted) = false;
|
||||||
GVAR(traceID) = -1;
|
|
||||||
GVAR(autoTrace) = true;
|
|
||||||
|
|
||||||
|
|
||||||
// * Other Shit */
|
// * Other Shit */
|
||||||
PREP(frag_trace);
|
PREP(addBlackList);
|
||||||
PREP(denyFrag);
|
|
||||||
PREP(BIS_ARTY_WRAPPER);
|
|
||||||
PREP(startTracing);
|
|
||||||
PREP(stopTracing);
|
|
||||||
PREP(clearTraces);
|
|
||||||
PREP(trackTrace);
|
|
||||||
PREP(addTrack);
|
PREP(addTrack);
|
||||||
PREP(drawTraces);
|
PREP(drawTraces);
|
||||||
PREP(removeTrack);
|
PREP(removeTrack);
|
||||||
PREP(spallHP);
|
PREP(spallHP);
|
||||||
PREP(addBlackList);
|
PREP(startTracing);
|
||||||
PREP(addManualTrack);
|
PREP(stopTracing);
|
||||||
|
PREP(trackTrace);
|
||||||
|
|
||||||
ADDON = true;
|
ADDON = true;
|
@ -10,7 +10,6 @@ class CfgPatches {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
//PRELOAD_ADDONS;
|
|
||||||
|
|
||||||
#include "CfgEventhandlers.hpp"
|
#include "CfgEventhandlers.hpp"
|
||||||
#include "CfgAmmo.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,4 +1,4 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
private ["_round"];
|
private ["_round"];
|
||||||
_round = _this select 0;
|
_round = _this select 0;
|
||||||
GVAR(blackList) set[(count GVAR(blackList)), _round];
|
GVAR(blackList) set[(count GVAR(blackList)), _round];
|
@ -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"
|
#include "script_component.hpp"
|
||||||
if(GVAR(autoTrace)) then {
|
|
||||||
|
private ["_color", "_data", "_index", "_obj", "_objSpd", "_origin", "_positions"];
|
||||||
|
|
||||||
|
if (GVAR(autoTrace)) then {
|
||||||
[] call FUNC(startTracing);
|
[] call FUNC(startTracing);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -12,9 +15,9 @@ if((count _this) > 2) then {
|
|||||||
_color = _this select 2;
|
_color = _this select 2;
|
||||||
};
|
};
|
||||||
_positions = [];
|
_positions = [];
|
||||||
_objVel = velocity _obj;
|
_objSpd = vectorMagnitude (velocity _obj);
|
||||||
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
|
_positions set[(count _positions), [(getPos _obj), _objSpd]];
|
||||||
_positions set[(count _positions), [(getPos _obj), _objTVel]];
|
_data = [_origin, typeOf _origin, typeOf _obj, _objSpd, _positions, _color];
|
||||||
_data = [_origin, typeOf _origin, typeOf _obj, _objTVel, _positions, _color];
|
|
||||||
GVAR(traces) set[_index, _data];
|
GVAR(traces) set[_index, _data];
|
||||||
[DFUNC(trackTrace), 0, [_obj, _index, time]] call cba_fnc_addPerFrameHandler;
|
[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
|
#ifdef DEBUG_MODE_FULL
|
||||||
GVAR(traceFrags) = true;
|
GVAR(traceFrags) = true;
|
||||||
#endif
|
#endif
|
||||||
// player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
||||||
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
|
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
|
||||||
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
|
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
|
||||||
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
|
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
|
||||||
"_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect",
|
"_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect",
|
||||||
"_fragment"];
|
"_fragment", "_index", "_hitData", "_fragTypes", "_fragType", "_foundObjects"];
|
||||||
|
|
||||||
|
|
||||||
_params = _this select 0;
|
_params = _this select 0;
|
||||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
[(_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 {
|
if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
||||||
// player sideChat format["BBBB"];
|
// ACE_player sideChat format["BBBB"];
|
||||||
_exit = false;
|
_exit = false;
|
||||||
_vm = 1;
|
_vm = 1;
|
||||||
_velocity = _initialData select 5;
|
_velocity = _initialData select 5;
|
||||||
|
|
||||||
_oldVelocity = _velocity call BIS_fnc_magnitude;
|
_oldVelocity = vectorMagnitude _velocity;
|
||||||
_curVelocity = (velocity _round) call BIS_fnc_magnitude;
|
_curVelocity = vectorMagnitude (velocity _round);
|
||||||
|
|
||||||
if(alive _round) then {
|
if(alive _round) then {
|
||||||
_diff = _velocity vectorDiff (velocity _round);
|
_diff = _velocity vectorDiff (velocity _round);
|
||||||
_polar = _diff call CBA_fnc_vect2polar;
|
_polar = _diff call CBA_fnc_vect2polar;
|
||||||
// player sideChat format["polar: %1", _polar];
|
// ACE_player sideChat format["polar: %1", _polar];
|
||||||
if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then {
|
if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then {
|
||||||
if(_caliber < 2.5) then {
|
if(_caliber < 2.5) then {
|
||||||
// player sideChat format["exit!"];
|
// ACE_player sideChat format["exit!"];
|
||||||
_exit = true;
|
_exit = true;
|
||||||
} else {
|
} else {
|
||||||
_vm = 1-(_curVelocity/_oldVelocity);
|
_vm = 1-(_curVelocity/_oldVelocity);
|
||||||
@ -66,32 +65,24 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
_pos = _hpData select 3;
|
_pos = _hpData select 3;
|
||||||
_spallPos = nil;
|
_spallPos = nil;
|
||||||
for "_i" from 0 to 100 do {
|
for "_i" from 0 to 100 do {
|
||||||
_pos1 = [
|
_pos1 = _pos vectorAdd (_unitDir vectorMultiply (0.01 * _i));
|
||||||
(_pos select 0) + (((_unitDir select 0)*0.01)*_i),
|
_pos2 = _pos vectorAdd (_unitDir vectorMultiply (0.01 * (_i + 1)));
|
||||||
(_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))
|
|
||||||
];
|
|
||||||
// _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)];
|
// _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)];
|
||||||
// diag_log text format["b: %1", _blah];
|
// diag_log text format["b: %1", _blah];
|
||||||
|
|
||||||
// _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]];
|
// _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]];
|
||||||
// NOU_TRACES set[(count NOU_TRACES), _data];
|
// NOU_TRACES set[(count NOU_TRACES), _data];
|
||||||
|
|
||||||
if(!lineIntersects [_pos1, _pos2]) exitWith {
|
if(!lineIntersects [_pos1, _pos2]) exitWith {
|
||||||
// player sideChat format["FOUND!"];
|
// ACE_player sideChat format["FOUND!"];
|
||||||
_spallPos = _pos2;
|
_spallPos = _pos2;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
if(!isNil "_spallPos") then {
|
if(!isNil "_spallPos") then {
|
||||||
_spallPolar = _velocity call CBA_fnc_vect2polar;
|
_spallPolar = _velocity call CBA_fnc_vect2polar;
|
||||||
|
|
||||||
if(_explosive > 0) then {
|
if(_explosive > 0) then {
|
||||||
// player sideChat format["EXPLOSIVE!"];
|
// ACE_player sideChat format["EXPLOSIVE!"];
|
||||||
_warn = false;
|
_warn = false;
|
||||||
_c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE");
|
_c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE");
|
||||||
if(_c == 0) then { _c = 1; _warn = true;};
|
if(_c == 0) then { _c = 1; _warn = true;};
|
||||||
@ -109,7 +100,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
_fragPower = (((_m/_c)+_k)^-(1/2))*_gC;
|
_fragPower = (((_m/_c)+_k)^-(1/2))*_gC;
|
||||||
_spallPolar set[0, _fragPower*0.66];
|
_spallPolar set[0, _fragPower*0.66];
|
||||||
};
|
};
|
||||||
|
|
||||||
_fragTypes = [
|
_fragTypes = [
|
||||||
"ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small",
|
"ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small",
|
||||||
"ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium",
|
"ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium",
|
||||||
@ -117,7 +108,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
"ACE_frag_spall_huge"
|
"ACE_frag_spall_huge"
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// diag_log text format["SPALL POWER: %1", _spallPolar select 0];
|
// diag_log text format["SPALL POWER: %1", _spallPolar select 0];
|
||||||
_spread = 15+(random 25);
|
_spread = 15+(random 25);
|
||||||
_spallCount = 5+(random 10);
|
_spallCount = 5+(random 10);
|
||||||
@ -130,14 +121,14 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
_dir = _dir % 360;
|
_dir = _dir % 360;
|
||||||
_vel = (_spallPolar select 0)*0.33*_vm;
|
_vel = (_spallPolar select 0)*0.33*_vm;
|
||||||
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
|
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
|
||||||
|
|
||||||
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
||||||
_fragType = round (random ((count _fragTypes)-1));
|
_fragType = round (random ((count _fragTypes)-1));
|
||||||
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||||
_fragment setPosASL _spallPos;
|
_fragment setPosASL _spallPos;
|
||||||
_fragment setVelocity _spallFragVect;
|
_fragment setVelocity _spallFragVect;
|
||||||
if(GVAR(traceFrags)) then {
|
if(GVAR(traceFrags)) then {
|
||||||
[player, _fragment, [1,0.5,0,1]] call FUNC(addTrack);
|
[ACE_player, _fragment, [1,0.5,0,1]] call FUNC(addTrack);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
_spread = 5+(random 5);
|
_spread = 5+(random 5);
|
||||||
@ -151,14 +142,14 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
|
|||||||
_dir = _dir % 360;
|
_dir = _dir % 360;
|
||||||
_vel = (_spallPolar select 0)*0.55*_vm;
|
_vel = (_spallPolar select 0)*0.55*_vm;
|
||||||
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
|
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
|
||||||
|
|
||||||
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
||||||
_fragType = round (random ((count _fragTypes)-1));
|
_fragType = round (random ((count _fragTypes)-1));
|
||||||
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||||
_fragment setPosASL _spallPos;
|
_fragment setPosASL _spallPos;
|
||||||
_fragment setVelocity _spallFragVect;
|
_fragment setVelocity _spallFragVect;
|
||||||
if(GVAR(traceFrags)) then {
|
if(GVAR(traceFrags)) then {
|
||||||
[player, _fragment, [1,0,0,1]] call FUNC(addTrack);
|
[ACE_player, _fragment, [1,0,0,1]] call FUNC(addTrack);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_color", "_index", "_lastPos", "_lastSpd", "_max", "_positions", "_startSpeed"];
|
||||||
|
|
||||||
{
|
{
|
||||||
_positions = _x select 4;
|
_positions = _x select 4;
|
||||||
_color = _x select 5;
|
_color = _x select 5;
|
||||||
_index = 0;
|
_index = 0;
|
||||||
_max = count _positions;
|
_max = count _positions;
|
||||||
_startSpeed = (_positions select 0) select 1;
|
_startSpeed = 0.01 max ((_positions select 0) select 1);
|
||||||
if(_startSpeed <= 0) then {
|
|
||||||
_startSpeed = 0.01;
|
|
||||||
};
|
|
||||||
_lastSpd = [];
|
_lastSpd = [];
|
||||||
_lastPos = [];
|
_lastPos = [];
|
||||||
while {_index < _max} do {
|
while {_index < _max} do {
|
||||||
@ -29,4 +29,4 @@
|
|||||||
_lastSpd = _data1 select 1;
|
_lastSpd = _data1 select 1;
|
||||||
};
|
};
|
||||||
// drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"];
|
// drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"];
|
||||||
} forEach GVAR(traces);
|
} forEach GVAR(traces);
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#include "script_component.hpp"
|
#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;
|
_gun = _this select 0;
|
||||||
_type = _this select 4;
|
_type = _this select 4;
|
||||||
@ -11,10 +13,10 @@ if(_round in GVAR(blackList)) exitWith {
|
|||||||
};
|
};
|
||||||
|
|
||||||
_doFragTrack = false;
|
_doFragTrack = false;
|
||||||
if(_gun == player) then {
|
if(_gun == ACE_player) then {
|
||||||
_doFragTrack = true;
|
_doFragTrack = true;
|
||||||
} else {
|
} else {
|
||||||
if((gunner _gun) == player) then {
|
if((gunner _gun) == ACE_player) then {
|
||||||
_doFragTrack = true;
|
_doFragTrack = true;
|
||||||
} else {
|
} else {
|
||||||
if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then {
|
if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then {
|
||||||
@ -28,14 +30,18 @@ if(_doSpall) then {
|
|||||||
GVAR(spallHPData) = [];
|
GVAR(spallHPData) = [];
|
||||||
};
|
};
|
||||||
if(GVAR(spallIsTrackingCount) > 5) then {
|
if(GVAR(spallIsTrackingCount) > 5) then {
|
||||||
// player sideChat "LIMT!";
|
// ACE_player sideChat "LIMT!";
|
||||||
_doSpall = false;
|
_doSpall = false;
|
||||||
} else {
|
} else {
|
||||||
GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1;
|
GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
// player sideChat format["c: %1", GVAR(spallIsTrackingCount)];
|
// ACE_player sideChat format["c: %1", GVAR(spallIsTrackingCount)];
|
||||||
[player, _round, [1,0,0,1]] call nou_fnc_addTrack;
|
|
||||||
|
#ifdef DEBUG_MODE_FULL
|
||||||
|
[ACE_player, _round, [1,0,0,1]] call FUNC(addTrack);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(_doFragTrack && alive _round) then {
|
if(_doFragTrack && alive _round) then {
|
||||||
GVAR(trackedObjects) pushBack _round;
|
GVAR(trackedObjects) pushBack _round;
|
||||||
_spallTrack = [];
|
_spallTrack = [];
|
||||||
@ -44,5 +50,5 @@ if(_doFragTrack && alive _round) then {
|
|||||||
if(_doSpall) then {
|
if(_doSpall) then {
|
||||||
[_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack);
|
[_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack);
|
||||||
};
|
};
|
||||||
// player sideChat "WTF2";
|
// ACE_player sideChat "WTF2";
|
||||||
};
|
};
|
||||||
|
@ -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;
|
|
||||||
};
|
|
@ -9,14 +9,14 @@
|
|||||||
if(!isServer) exitWith { };
|
if(!isServer) exitWith { };
|
||||||
|
|
||||||
// _startTime = diag_tickTime;
|
// _startTime = diag_tickTime;
|
||||||
private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed",
|
private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed",
|
||||||
"_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom",
|
"_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom",
|
||||||
"_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox",
|
"_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox",
|
||||||
"_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir",
|
"_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir",
|
||||||
"_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount",
|
"_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount",
|
||||||
"_sectorSize", "_sectorOffset", "_randomDir"];
|
"_sectorSize", "_sectorOffset", "_randomDir", "_endTime"];
|
||||||
|
|
||||||
|
|
||||||
_round = _this select 0;
|
_round = _this select 0;
|
||||||
_lastPos = _this select 1;
|
_lastPos = _this select 1;
|
||||||
_lastVel = _this select 2;
|
_lastVel = _this select 2;
|
||||||
@ -108,8 +108,8 @@ _fragArcs = [];
|
|||||||
_fragArcs set[360, 0];
|
_fragArcs set[360, 0];
|
||||||
|
|
||||||
#ifdef DEBUG_MODE_FULL
|
#ifdef DEBUG_MODE_FULL
|
||||||
player sideChat format["_fragRange: %1", _fragRange];
|
ACE_player sideChat format["_fragRange: %1", _fragRange];
|
||||||
player sideChat format["_objects: %1", _objects];
|
ACE_player sideChat format["_objects: %1", _objects];
|
||||||
#endif
|
#endif
|
||||||
_doRandom = false;
|
_doRandom = false;
|
||||||
if(_isArmed && (count _objects) > 0) then {
|
if(_isArmed && (count _objects) > 0) then {
|
||||||
@ -127,16 +127,16 @@ if(_isArmed && (count _objects) > 0) then {
|
|||||||
_cubic = _bbX*_bbY*_bbZ;
|
_cubic = _bbX*_bbY*_bbZ;
|
||||||
if(_cubic > 1) then {
|
if(_cubic > 1) then {
|
||||||
_doRandom = true;
|
_doRandom = true;
|
||||||
|
|
||||||
_targetVel = (velocity _target);
|
_targetVel = (velocity _target);
|
||||||
|
|
||||||
|
|
||||||
_targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))];
|
_targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))];
|
||||||
_targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))];
|
_targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))];
|
||||||
_targetPos set[2, (_targetPos select 2)+_add];
|
_targetPos set[2, (_targetPos select 2)+_add];
|
||||||
|
|
||||||
_baseVec = _lastPos vectorFromTo _targetPos;
|
_baseVec = _lastPos vectorFromTo _targetPos;
|
||||||
|
|
||||||
_dir = floor(_baseVec call CBA_fnc_vectDir);
|
_dir = floor(_baseVec call CBA_fnc_vectDir);
|
||||||
_currentCount = _fragArcs select _dir;
|
_currentCount = _fragArcs select _dir;
|
||||||
if(isNil "_currentCount") then {
|
if(isNil "_currentCount") then {
|
||||||
@ -153,18 +153,14 @@ if(_isArmed && (count _objects) > 0) then {
|
|||||||
};
|
};
|
||||||
for "_i" from 1 to _count do {
|
for "_i" from 1 to _count do {
|
||||||
_vec = +_baseVec;
|
_vec = +_baseVec;
|
||||||
|
|
||||||
_vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)];
|
_vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)];
|
||||||
_vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)];
|
_vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)];
|
||||||
_vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)];
|
_vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)];
|
||||||
|
|
||||||
_fp = (_fragPower-(random (_fragPowerRandom)));
|
_fp = (_fragPower-(random (_fragPowerRandom)));
|
||||||
_vel = [
|
_vel = _vec vectorMultiply _fp;
|
||||||
(_vec select 0)*_fp,
|
|
||||||
(_vec select 1)*_fp,
|
|
||||||
(_vec select 2)*_fp
|
|
||||||
];
|
|
||||||
|
|
||||||
_fragType = round (random ((count _fragTypes)-1));
|
_fragType = round (random ((count _fragTypes)-1));
|
||||||
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||||
// diag_log text format["fp: %1 %2", _fp, typeOf _fragObj];
|
// diag_log text format["fp: %1 %2", _fp, typeOf _fragObj];
|
||||||
@ -176,7 +172,7 @@ if(_isArmed && (count _objects) > 0) then {
|
|||||||
GVAR(traceFrags) = true;
|
GVAR(traceFrags) = true;
|
||||||
#endif
|
#endif
|
||||||
if(GVAR(traceFrags)) then {
|
if(GVAR(traceFrags)) then {
|
||||||
[player, _fragObj, [1,0,0,1]] call FUNC(addTrack);
|
[ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack);
|
||||||
};
|
};
|
||||||
_fragCount = _fragCount + 1;
|
_fragCount = _fragCount + 1;
|
||||||
_currentCount = _currentCount + 1;
|
_currentCount = _currentCount + 1;
|
||||||
@ -201,12 +197,8 @@ if(_isArmed && (count _objects) > 0) then {
|
|||||||
|
|
||||||
_fp = (_fragPower-(random (_fragPowerRandom)));
|
_fp = (_fragPower-(random (_fragPowerRandom)));
|
||||||
|
|
||||||
_vel = [
|
_vel = _vec vectorMultiply _fp;
|
||||||
(_vec select 0)*_fp,
|
|
||||||
(_vec select 1)*_fp,
|
|
||||||
(_vec select 2)*_fp
|
|
||||||
];
|
|
||||||
|
|
||||||
_fragType = round (random ((count _fragTypes)-1));
|
_fragType = round (random ((count _fragTypes)-1));
|
||||||
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||||
_fragObj setPosASL _lastPos;
|
_fragObj setPosASL _lastPos;
|
||||||
@ -217,14 +209,14 @@ if(_isArmed && (count _objects) > 0) then {
|
|||||||
GVAR(traceFrags) = true;
|
GVAR(traceFrags) = true;
|
||||||
#endif
|
#endif
|
||||||
if(GVAR(traceFrags)) then {
|
if(GVAR(traceFrags)) then {
|
||||||
[player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack);
|
[ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack);
|
||||||
};
|
};
|
||||||
_fragCount = _fragCount + 1;
|
_fragCount = _fragCount + 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
// #ifdef DEBUG_MODE_FULL
|
// #ifdef DEBUG_MODE_FULL
|
||||||
// player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
|
// ACE_player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
|
||||||
// player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
|
// ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
|
||||||
// #endif
|
// #endif
|
||||||
// _endTime = diag_tickTime;
|
// _endTime = diag_tickTime;
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
#include "script_component.hpp"
|
#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))];
|
//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);
|
_initialData = GVAR(spallHPData) select (_this select 0);
|
||||||
if(!isNil "_initialData") then {
|
if (!isNil "_initialData") then {
|
||||||
_hpRound = ((_this select 1) select 0) select 2;
|
_hpRound = ((_this select 1) select 0) select 2;
|
||||||
_round = _initialData select 3;
|
_round = _initialData select 3;
|
||||||
_hpDirect = ((_this select 1) select 0) select 10;
|
_hpDirect = ((_this select 1) select 0) select 10;
|
||||||
if(_hpDirect && {_round == _hpRound}) then {
|
if (_hpDirect && {_round == _hpRound}) then {
|
||||||
|
|
||||||
{
|
{
|
||||||
_hpData = _x;
|
_hpData = _x;
|
||||||
_round = _initialData select 3;
|
_round = _initialData select 3;
|
||||||
@ -26,4 +26,4 @@ if((_this select 0) <= (count GVAR(spallHPData))) then {
|
|||||||
} forEach (_this select 1);
|
} forEach (_this select 1);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,30 +1,22 @@
|
|||||||
//fnc_spallTrack.sqf
|
//fnc_spallTrack.sqf
|
||||||
#include "script_component.hpp"
|
#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;
|
_round = _this select 0;
|
||||||
_multiplier = _this select 1;
|
_multiplier = _this select 1;
|
||||||
_foundObjects = _this select 2;
|
_foundObjects = _this select 2;
|
||||||
_foundObjectHPIds = _this select 3;
|
_foundObjectHPIds = _this select 3;
|
||||||
|
|
||||||
_delta = (1/diag_fps)*_multiplier;
|
_delta = (1/diag_fps) * _multiplier;
|
||||||
_curPos = getPosASL _round;
|
_curPos = getPosASL _round;
|
||||||
_velocity = velocity _round;
|
_velocity = velocity _round;
|
||||||
|
|
||||||
_velocityStep = [
|
_velocityStep = _velocity vectorMultiply _delta;
|
||||||
(_velocity select 0)*_delta,
|
_forwardPos = _curPos vectorAdd _velocityStep;
|
||||||
(_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)
|
|
||||||
];
|
|
||||||
|
|
||||||
_intersectsWith = lineIntersectsWith [_curPos, _forwardPos];
|
_intersectsWith = lineIntersectsWith [_curPos, _forwardPos];
|
||||||
|
|
||||||
if(count _intersectsWith > 0) then {
|
if (count _intersectsWith > 0) then {
|
||||||
// player sideChat format["inter: %1", _intersectsWith];
|
// player sideChat format["inter: %1", _intersectsWith];
|
||||||
{
|
{
|
||||||
if(!(_x in _foundObjects)) then {
|
if(!(_x in _foundObjects)) then {
|
||||||
@ -37,4 +29,4 @@ if(count _intersectsWith > 0) then {
|
|||||||
GVAR(spallHPData) set[_index, _data];
|
GVAR(spallHPData) set[_index, _data];
|
||||||
};
|
};
|
||||||
} forEach _intersectsWith;
|
} forEach _intersectsWith;
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//fnc_trackFragRound.sqf
|
//fnc_trackFragRound.sqf
|
||||||
#include "script_component.hpp"
|
#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;
|
_params = _this select 0;
|
||||||
_round = _params select 0;
|
_round = _params select 0;
|
||||||
_lastPos = _params select 1;
|
_lastPos = _params select 1;
|
||||||
@ -15,11 +15,11 @@ if (!alive _round) then {
|
|||||||
[_this select 1] call cba_fnc_removePerFrameHandler;
|
[_this select 1] call cba_fnc_removePerFrameHandler;
|
||||||
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
|
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
|
||||||
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
|
||||||
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP");
|
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(skip));
|
||||||
if(_skip == 0) then {
|
if(_skip == 0) then {
|
||||||
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
|
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
|
||||||
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
|
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
|
||||||
_force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE");
|
_force = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(force));
|
||||||
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
|
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
|
||||||
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
|
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
|
||||||
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;
|
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
private ["_params", "_tracerObj", "_index", "_positions", "_data"];
|
||||||
_params = _this select 0;
|
_params = _this select 0;
|
||||||
_tracerObj = _params select 0;
|
_tracerObj = _params select 0;
|
||||||
_index = _params select 1;
|
_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;
|
_data = GVAR(traces) select _index;
|
||||||
_positions = _data select 4;
|
_positions = _data select 4;
|
||||||
_objVel = velocity _tracerObj;
|
_positions set[(count _positions), [(getPos _tracerObj), vectorMagnitude (velocity _tracerObj)]];
|
||||||
_objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2);
|
|
||||||
_positions set[(count _positions), [(getPos _tracerObj), _objTVel]];
|
|
||||||
} else {
|
} else {
|
||||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
[(_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>
|
<French>Désactive la fragmentation</French>
|
||||||
<Hungarian>Repeszek letiltása</Hungarian>
|
<Hungarian>Repeszek letiltása</Hungarian>
|
||||||
<Italian>Disattiva la frammentazione</Italian>
|
<Italian>Disattiva la frammentazione</Italian>
|
||||||
|
<Portuguese>Disabilitar Fragmentação</Portuguese>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Edited with tabler. -->
|
|
||||||
<Project name="ACE">
|
<Project name="ACE">
|
||||||
<Package name="Goggles">
|
<Package name="Goggles">
|
||||||
<Key ID="STR_ACE_Goggles_ShowInThirdPerson">
|
<Key ID="STR_ACE_Goggles_ShowInThirdPerson">
|
||||||
|
@ -82,7 +82,7 @@ class CfgAmmo {
|
|||||||
SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100};
|
SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100};
|
||||||
SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70};
|
SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70};
|
||||||
SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70};
|
SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70};
|
||||||
timeToLive = 60;
|
timeToLive = 6;
|
||||||
fuseDistance = 2.3;
|
fuseDistance = 2.3;
|
||||||
model = PATHTOF(models\ACE_m84_thrown.p3d);
|
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]];
|
} 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);
|
TRACE_1("Line of sight count (out of 4)",_losCount);
|
||||||
if (_losCount == 0) then {
|
if (_losCount <= 1) then {
|
||||||
_strength = _strength / 10;
|
_strength = _strength / 10;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Edited with tabler. -->
|
|
||||||
<Project name="ACE">
|
<Project name="ACE">
|
||||||
<Package name="Grenades">
|
<Package name="Grenades">
|
||||||
<Key ID="STR_ACE_Grenades_SwitchGrenadeMode">
|
<Key ID="STR_ACE_Grenades_SwitchGrenadeMode">
|
||||||
@ -96,7 +95,7 @@
|
|||||||
<Russian>XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий.</Russian>
|
<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>
|
<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>
|
<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>
|
||||||
<Key ID="STR_ACE_Grenades_M127A1_White_Name">
|
<Key ID="STR_ACE_Grenades_M127A1_White_Name">
|
||||||
<English>M127A1 Hand Held Signal (White)</English>
|
<English>M127A1 Hand Held Signal (White)</English>
|
||||||
@ -153,7 +152,7 @@
|
|||||||
<Hungarian>Kézi jelzőrakéta, Fehér színű</Hungarian>
|
<Hungarian>Kézi jelzőrakéta, Fehér színű</Hungarian>
|
||||||
<Italian>Bengala (Bianco)</Italian>
|
<Italian>Bengala (Bianco)</Italian>
|
||||||
<Polish>Flara ręczna (biała)</Polish>
|
<Polish>Flara ręczna (biała)</Polish>
|
||||||
<Portuguese>Sinalizador (Branco)</Portuguese>
|
<Portuguese>Sinalizador de Mão (Branco)</Portuguese>
|
||||||
<Russian>Фальшфейер (Белый)</Russian>
|
<Russian>Фальшфейер (Белый)</Russian>
|
||||||
<Spanish>Bengala (Blanca)</Spanish>
|
<Spanish>Bengala (Blanca)</Spanish>
|
||||||
<French>Feux à main (Blanc)</French>
|
<French>Feux à main (Blanc)</French>
|
||||||
@ -165,7 +164,7 @@
|
|||||||
<Hungarian>Kézi jelzőrakéta, Piros színű</Hungarian>
|
<Hungarian>Kézi jelzőrakéta, Piros színű</Hungarian>
|
||||||
<Italian>Bengala (Rosso)</Italian>
|
<Italian>Bengala (Rosso)</Italian>
|
||||||
<Polish>Flara ręczna (czerwona)</Polish>
|
<Polish>Flara ręczna (czerwona)</Polish>
|
||||||
<Portuguese>Sinalizador (Vermelho)</Portuguese>
|
<Portuguese>Sinalizador de Mão (Vermelho)</Portuguese>
|
||||||
<Russian>Фальшфейер (Красный)</Russian>
|
<Russian>Фальшфейер (Красный)</Russian>
|
||||||
<Spanish>Bengala (Roja)</Spanish>
|
<Spanish>Bengala (Roja)</Spanish>
|
||||||
<French>Feux à main (Rouge)</French>
|
<French>Feux à main (Rouge)</French>
|
||||||
@ -177,7 +176,7 @@
|
|||||||
<Hungarian>Kézi jelzőrakéta, Zöld színű</Hungarian>
|
<Hungarian>Kézi jelzőrakéta, Zöld színű</Hungarian>
|
||||||
<Italian>Bengala (Verde)</Italian>
|
<Italian>Bengala (Verde)</Italian>
|
||||||
<Polish>Flara ręczna (zielona)</Polish>
|
<Polish>Flara ręczna (zielona)</Polish>
|
||||||
<Portuguese>Sinalizador (Verde)</Portuguese>
|
<Portuguese>Sinalizador de Mão (Verde)</Portuguese>
|
||||||
<Russian>Фальшфейер (Зелёный)</Russian>
|
<Russian>Фальшфейер (Зелёный)</Russian>
|
||||||
<Spanish>Bengala (Verde)</Spanish>
|
<Spanish>Bengala (Verde)</Spanish>
|
||||||
<French>Feux à main (Vert)</French>
|
<French>Feux à main (Vert)</French>
|
||||||
@ -189,7 +188,7 @@
|
|||||||
<Hungarian>Kézi jelzőrakéta, Sárga színű</Hungarian>
|
<Hungarian>Kézi jelzőrakéta, Sárga színű</Hungarian>
|
||||||
<Italian>Bengala (Giallo)</Italian>
|
<Italian>Bengala (Giallo)</Italian>
|
||||||
<Polish>Flara ręczna (żółta)</Polish>
|
<Polish>Flara ręczna (żółta)</Polish>
|
||||||
<Portuguese>Sinalizador (Amarelo)</Portuguese>
|
<Portuguese>Sinalizador de Mão (Amarelo)</Portuguese>
|
||||||
<Russian>Фальшфейер (Жёлтые)</Russian>
|
<Russian>Фальшфейер (Жёлтые)</Russian>
|
||||||
<Spanish>Bengala (Amarilla)</Spanish>
|
<Spanish>Bengala (Amarilla)</Spanish>
|
||||||
<French>Feux à main (Jaune)</French>
|
<French>Feux à main (Jaune)</French>
|
||||||
@ -243,4 +242,4 @@
|
|||||||
<Spanish>M127A1 (Amarilla)</Spanish>
|
<Spanish>M127A1 (Amarilla)</Spanish>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user