Merge conflicts resolved

This commit is contained in:
Dimaslg 2015-04-29 21:15:22 +02:00
commit f8d5c423ae
162 changed files with 4809 additions and 1283 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@ release/*
texHeaders.bin
*.swp
*.swo
*.biprivatekey

View File

@ -17,7 +17,7 @@ Janus
Kieran
NouberNou
PabstMirror <pabstmirror@gmail.com>
Ruthberg
Ruthberg <ulteq@web.de>
tpM
ViperMaul
VKing <kauestad@gmail.com>
@ -30,9 +30,11 @@ ACCtomeek <tomeek99@gmail.com>
Adanteh
aeroson
Aggr094 <bastards4glory@gmail.com>
Alganthe <alganthe@live.fr>
Anthariel <Contact@storm-simulation.com>
BlackQwar
Brakoviejo
Brisse <brisse@outlook.com>
Clon1998 <ps.patti1998@gmail.com>
Codingboy
Crusty
@ -48,6 +50,7 @@ Ghost
GieNkoV <gienkov.grzegorz@gmail.com>
gpgpgpgp
Grzegorz
Gianmarco Varriale (TeamNuke) <admin@forhost.org>
Hamburger SV
Harakhti <shadowdragonphd@gmail.com>
havena <silveredenis@gmail.com>
@ -69,7 +72,7 @@ Raspu86
Riccardo Petricca <petriccarcc@gmail.com>
Robert Boklahánics <bokirobi@gmail.com>
ramius86 <pasini86@hotmail.com>
simon84
simon84 <badguy360th@gmail.com>
Sniperwolf572 <tenga6@gmail.com>
Tachi <zaveruha007@gmail.com>
Tonic
@ -83,3 +86,4 @@ Asgar Serran <piechottaf@web.de>
Kavinsky <nmunozfernandez@gmail.com>
Coren <coren4@gmail.com>
OnkelDisMaster <onkeldismaster@gmail.com>
Dimaslg <dimaslg@telecable.e>

View File

@ -1,4 +1,4 @@
Copyright (C) 2014 Felix "KoffeinFlummi" Wiegand
Copyright (C) 2015 Felix "KoffeinFlummi" Wiegand
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -1,48 +1,83 @@
<p align="center">
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg" height="80" />
<img src="https://github.com/acemod/ACE3/blob/master/extras/assets/logo/black/ACE3-Logo.jpg"
height="112">
</p>
<p align="center">
<a href="https://github.com/acemod/ACE3/releases">
<img src="http://img.shields.io/badge/release-3.0-green.svg?style=flat" alt="ACE version">
<img src="http://img.shields.io/badge/Version-3.0.0-blue.svg?style=flat"
alt="ACE version">
</a>
<a href="#">
<img src="http://img.shields.io/badge/download-22_MB-blue.svg?style=flat" alt="ACE download">
<a href="https://github.com/acemod/ACE3/archive/master.zip">
<img src="http://img.shields.io/badge/Download-48.3_MB-green.svg?style=flat"
alt="ACE download">
</a>
<a href="https://github.com/acemod/ACE3/issues">
<img src="http://img.shields.io/github/issues/acemod/ACE3.svg?style=flat" alt="ACE issues">
<img src="http://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat&label=Issues"
alt="ACE issues">
</a>
<a href="http://forums.bistudio.com/showthread.php?190433-ACE3-A-collaborative-merger-between-AGM-CSE-and-ACE&p=2910796&viewfull=1#post2910796">
<img src="https://img.shields.io/badge/BIF-Thread-lightgrey.svg?style=flat"
alt="BIF thread">
</a>
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
<img src="http://img.shields.io/badge/license-GPLv2-red.svg?style=flat" alt="ACE license">
<img src="http://img.shields.io/badge/License-GPLv2-red.svg?style=flat"
alt="ACE license">
</a>
</p>
<p align="center"><sup><strong>Requires the latest version of <a href="http://www.armaholic.com/page.php?id=18767">CBA A3</a> | <a href="#">BIF thread</a></strong></sup></p>
<p align="center"><sup><strong>Requires the latest version of <a href="http://www.armaholic.com/page.php?id=18767">CBA A3</a>. Visit us on <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup></p>
**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3.
This mod is entirely **open-source**, and everyone is free to propose changes or maintain their own, customized version as long as they make their changes open to the public in accordance with the GNU General Public License (for more information check the license file attached to this project).
The project is entirely **open-source** and all contributions are welcome. Feel free to maintain your own custom version, so long as the changes you make are open to the public in accordance with the GNU General Public License ([GPLv2](https://github.com/acemod/ACE3/blob/master/LICENSE)).
The mod is **built modularly** — almost any PBO can be removed, thus a team can maintain its own tailored version of ACE, which excludes a select number of components that they don't like, or which conflict with other add-ons. Components themselves, like e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience.
The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE by simply excluding any components they don't need, or those possibly in conflict with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience.
### Features
* Improved medical system
* Logistics system including cargo transport and vehicle maintenance
* Explosives system including different trigger types
* Captivity system
* Realistic names for vehicles and weapons
* Realistic ballistics including wind and humidity
* Backblast simulation
* A fire control system for armored vehicles and helicopters
***and more...***
### Core features
* Brand new 3D interaction/action system
* Performance and reliability framework
* Focus on modularity and customization
* New flexible client and server settings & configuration
* Improved medical system with various levels (basic/advanced) focus on gameplay/realism
* Proper & consistent network-synced weather
* Wind and weather-based ballistics
* Captivity system
* Explosives system, including different trigger types
* Map screen improvements marker placement and map tools
* Advanced missile guidance and laser designation
#### Guides & How-Tos
If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md).
#### Additional features
* Carrying and dragging
* Realistic names for vehicles and weapons
* A fire control system (FCS) for armored vehicles and helicopters
* Realistic ballistics/FCS calculated in C/C++ extensions
* Backblast area and overpressure simulation
* Disposable launchers
* Realistic G-forces
* Vehicle locking
* Realistic night and thermal vision modes
* Magazine repacking
* Realistic weapon overheating mechanic
* Combat deafness (temporary loss of hearing) simulation
* Improved ragdoll physics
* Improved interactions for AARs and ammo bearers
* Adjustable sniper scopes
* No idle animation with lowered weapon
* No talking player avatar
* Jumping over obstacles, climbing over walls and cutting down fences
* Vector, MicroDAGR and Kestrel devices<br>
***and much more...***
### Guides & how-tos
If you installed ACE3 but have trouble understanding how it all works, or where to start, read this first:
* [Getting started](http://ace3mod.com/wiki/user/getting-started.html)
#### Contributing
If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address.
You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address.
To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). See [this link](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) for details.
Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report a bug, propose a feature, or suggest changes to the existing ones. See also:
* [How to report an issue](http://ace3mod.com/wiki/user/how-to-report-an-issue.html)
* [How to make a feature request](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html)
#### Testing & Building
If you want to help us test the latest development changes, feel free to download our master branch, using either git — if familiar with the process — or directly, by following [this link](https://github.com/acemod/ACE3/archive/master.zip).
To find out how to set up your development environment and build a version of ACE for testing, follow [these instructions](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md).
#### Testing & building
To help us test the latest development changes, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or [with git](https://help.github.com/articles/fetching-a-remote/)), then assemble a test build:
* [Setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) step-by-step instructions on how to properly setup and build a version of ACE for testing purposes.

View File

@ -57,7 +57,7 @@ class ACE_Settings {
};
class GVAR(simulationRadius) {
displayName = "Simulation Radius";
description = "Defines the radius (in meters) in which advanced ballistics are applied";
description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles";
typeName = "SCALAR";
value = 3000;
};

View File

@ -69,7 +69,7 @@ class CfgVehicles {
};
class simulationRadius {
displayName = "Simulation Radius";
description = "Defines the radius (in meters) in which advanced ballistics are applied";
description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles";
typeName = "NUMBER";
defaultValue = 3000;
};

View File

@ -141,8 +141,12 @@ 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)];
[{
private ["_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
EXPLODE_4_PVT(_this select 0,_bullet,_caliber,_bulletTraceVisible,_index);
private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"];
_args = _this select 0;
_bullet = _args select 0;
_caliber = _args select 1;
_bulletTraceVisible = _args select 2;
_index = _args select 3;
_bulletVelocity = velocity _bullet;
_bulletPosition = getPosASL _bullet;

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="AdvancedBallistics">
<Key ID="STR_ACE_AdvancedBallistics_WindInfoKey">

View File

@ -29,7 +29,7 @@
<English>Open Cargo Door</English>
<German>Laderampe öffnen</German>
<Spanish>Abrir compuerta de carga</Spanish>
<French>Ourvir rampe cargo</French>
<French>Ourvir la rampe</French>
<Polish>Otwórz drzwi ładowni</Polish>
<Czech>Otevřít nákladní prostor</Czech>
<Hungarian>Rakodórámpa nyitása</Hungarian>
@ -40,7 +40,7 @@
<English>Close Cargo Door</English>
<German>Laderampe schließen</German>
<Spanish>Cerrar compuerta de carga</Spanish>
<French>Fermer rampe cargo</French>
<French>Fermer la rampe</French>
<Polish>Zamknij drzwi ładowni</Polish>
<Czech>Zavřít nákladní prostor</Czech>
<Hungarian>Rakodórámpa zárása</Hungarian>
@ -48,4 +48,4 @@
<Italian>Chiudi la porta del cargo</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -760,7 +760,7 @@ class ATragMX_Display {
y=0.265*safezoneH+safezoneY+0.35;
strings[]={"Height","Width"};
values[]={1,0};
onToolBoxSelChanged="GVAR(rangeAssistUseTargetHeight)=((_this select 1)==0)";
onToolBoxSelChanged=QUOTE(GVAR(rangeAssistUseTargetHeight) = ((_this select 1) == 0));
};
class TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE: TEXT_TARGET_RANGE_ASSIST_MEASUREMENT_METHOD {
idc=7003;

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="ATragMX">
<Key ID="STR_ACE_ATragMX_Name">
@ -28,6 +27,7 @@
<Russian>Защищенный КПК с ATragMX</Russian>
<Spanish>PDA rugerizada con ATragMX</Spanish>
<German>Robuster PDA mit ATragMX</German>
<French>PDA robuste avec ATragMX</French>
</Key>
<Key ID="STR_ACE_ATragMX_ATragMXDialogKey">
<English>Open ATragMX</English>
@ -38,4 +38,4 @@
<German>ATragMX öffnen</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -337,7 +337,7 @@ class CfgAmmo {
ACE_caliber=0.308;
ACE_bulletLength=1.353;
ACE_bulletMass=190;
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
ACE_ballisticCoefficients[]={0.268};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
@ -353,7 +353,7 @@ class CfgAmmo {
ACE_caliber=0.308;
ACE_bulletLength=1.489;
ACE_bulletMass=220;
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2};
ACE_ballisticCoefficients[]={0.310};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
@ -572,7 +572,6 @@ class CfgAmmo {
ACE_caliber=0.366;
ACE_bulletLength=1.350;
ACE_bulletMass=230;
ACE_transonicStabilityCoef=1;
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
ACE_ballisticCoefficients[]={0.368};
ACE_velocityBoundaries[]={};

View File

@ -9,7 +9,7 @@ class CfgVehicles {
//hitPart = "systemChat str _this";
};
};
class NATO_Box_Base;
class Box_NATO_Wps_F: NATO_Box_Base {
class TransportMagazines {

View File

@ -2,7 +2,7 @@
class CfgPatches {
class ADDON {
units[] = {"ACE_TargetWall"};
units[] = {"ACE_TargetWall","ACE_Box_Ammo"};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};

File diff suppressed because it is too large Load Diff

View File

@ -101,25 +101,20 @@ class CfgVehicles {
#define MACRO_LOADUNLOADCAPTIVE \
class ACE_Actions { \
class ACE_MainActions { \
selection = ""; \
class ACE_LoadCaptive { \
class GVAR(LoadCaptive) { \
displayName = "$STR_ACE_Captives_LoadCaptive"; \
distance = 4; \
condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \
statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \
exceptions[] = {"isNotEscorting"}; \
showDisabled = 0; \
priority = 1.2; \
hotkey = "L"; \
}; \
class ACE_UnloadCaptive { \
class GVAR(UnloadCaptive) { \
displayName = "$STR_ACE_Captives_UnloadCaptive"; \
distance = 4; \
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \
showDisabled = 0; \
priority = 1.2; \
hotkey = "C"; \
}; \
}; \
};

View File

@ -22,7 +22,7 @@ PARAMS_3(_unit,_target,_state);
if (_state) then {
if (_unit getVariable [QGVAR(isEscorting), false]) exitWith {};
[_unit, _target] call EFUNC(common,claim);
[_unit, _target, false] call EFUNC(common,claim);
_unit setVariable [QGVAR(isEscorting), true, true];
_target attachTo [_unit, [0, 1, 0]];
@ -34,8 +34,7 @@ if (_state) then {
{[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);},
nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))];
private "_escortFnc";
_escortFnc = {
[{
EXPLODE_3_PVT((_this select 0),_unit,_target,_actionID);
if (_unit getVariable [QGVAR(isEscorting), false]) then {
if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then {
@ -45,13 +44,12 @@ if (_state) then {
if (!(_unit getVariable [QGVAR(isEscorting), false])) then {
[(_this select 1)] call cba_fnc_removePerFrameHandler;
[objNull, _target] call EFUNC(common,claim);
[objNull, _target, false] call EFUNC(common,claim);
detach _target;
_unit removeAction _actionID;
_unit setVariable [QGVAR(escortedUnit), objNull, true];
};
};
[_escortFnc, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
}, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler;
} else {
_unit setVariable [QGVAR(isEscorting), false, true];

View File

@ -380,7 +380,7 @@
<English>Set the desired location of the progress bar on your screen.</English>
<German>Setze die gewünschte Position der Fortschrittsanzeige fest.</German>
<Spanish>Seleccionar la ubicación deseada de la barra de progreso en tu pantalla</Spanish>
<Italian>Modifica la posizione su schermo della barra di avanzamento.</Italian>
<Italian>Modifica la posizione della barra di avanzamernto sullo schermo</Italian>
<Russian>Установите желаемое положение строки состояния на экране.</Russian>
<Polish>Ustaw pożądaną lokalizację paska postępu na ekranie</Polish>
<French>Appliquer la position de la barre de progression sur l'écran</French>
@ -391,7 +391,7 @@
<English>Hint Background color</English>
<German>Hintergrundfarbe der Hinweise</German>
<Spanish>Color de fondo de las notificaciones</Spanish>
<Italian>Sfondo dei Suggerimenti</Italian>
<Italian>Colore di sfondo dei Suggerimenti</Italian>
<Russian>Цвет фона всплывающих подсказок</Russian>
<Polish>Kolor tła powiadomień</Polish>
<French>Notification: couleur de l'arrière plan</French>
@ -413,7 +413,7 @@
<English>Hint text font color</English>
<German>Textfarbe der Hinweise</German>
<Spanish>Color del texto de las notificaciones</Spanish>
<Italian>Testo dei Suggerimenti</Italian>
<Italian>Il colore del Testo dei Suggerimenti</Italian>
<Russian>Цвет шрифта всплывающих подсказок</Russian>
<Polish>Kolor tekstu powiadomień</Polish>
<French>Notification: couleur du texte</French>
@ -424,7 +424,7 @@
<English>The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified.</English>
<German>Wähle die Textfarbe für ACE-Hinweise. Die gewählte Farbe wird als Standartfarbe der Hinweise angezeigt, wenn der Hinweis selbst keine spezifische Farbe hat. </German>
<Spanish>El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado.</Spanish>
<Italian>Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato.</Italian>
<Italian>Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se il colore del testo non è specificato.</Italian>
<Russian>Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок.</Russian>
<Polish>Kolor tekstu dla powiadomień ACE. Ten kolor jest domyślnym dla wszystkich tekstów wyświetlanych poprzez System Powiadomień ACE, jeżeli dla powiadomienia nie określono innego koloru.</Polish>
<French>Notification ACE: couleur du texte. C'est la couleur par défaut de tout texte affiché dans les notifications ACE, si aucune couleur n'est spécifiée pour les notifications</French>
@ -447,7 +447,7 @@
<German>Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen).</German>
<Spanish>Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa.</Spanish>
<Czech>Banán je protáhlé ovoce a plod banánovníku (epigeická bobule).</Czech>
<Italian>Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotto da un gran numero di grandi pianti erbacee dotate di fiori, della famiglia delle Musaceae.</Italian>
<Italian>Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotta da un gran numero di grandi piante erbacee dotate di fiori, della famiglia delle Musaceae.</Italian>
<Russian>Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa).</Russian>
<Hungarian>A banán egy ehető gyümölcs, technikai szempontból bogyótermés, melyet több fürtvirágzatú növény termel a Musa rendszertani nemzetségben.</Hungarian>
<Polish>Rodzaj roślin z rodziny bananowatych, obejmujący około 80 gatunków.&lt;br /&gt;Przedstawiciele są typowymi przedstawicielami flory międzyzwrotnikowej Azji, Afryki i Australii.&lt;br /&gt;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>

View File

@ -7,7 +7,7 @@
<Spanish>Arrastrar</Spanish>
<Polish>Ciągnij</Polish>
<Czech>Táhnout</Czech>
<French>Tracter</French>
<French>Trainer</French>
<German>Ziehen</German>
<Portuguese>Arrastar</Portuguese>
<Italian>Trascina</Italian>

View File

@ -42,7 +42,7 @@
<German>Sprengstoffcode: %1</German>
<Spanish>Código del explosivo: %1</Spanish>
<Polish>Kod ładunku: %1</Polish>
<French>Code explosif: %1</French>
<French>Code de l'explosif: %1</French>
<Czech>Kód výbušniny: %1</Czech>
<Hungarian>Robbanóanyag kódja: %1</Hungarian>
<Portuguese>Código do explosivo: %1</Portuguese>
@ -222,7 +222,7 @@
<German>Löschen</German>
<Spanish>Borrar</Spanish>
<Polish>Usuń</Polish>
<French>Désamorçé</French>
<French>Effacer</French>
<Czech>Čistý</Czech>
<Italian>Libera</Italian>
<Hungarian>Törlés</Hungarian>
@ -478,6 +478,7 @@
<Spanish>Detonador de hombre muerto</Spanish>
<Hungarian>Dead Man's Switch</Hungarian>
<Russian>Кнопка мертвеца</Russian>
<Italian>Detonatore a rilascio</Italian>
</Key>
<Key ID="STR_ACE_Explosives_DeadManSwitch_description">
<English>Used to remotely trigger explosives when released.</English>
@ -488,7 +489,7 @@
<Spanish>Utilizado para detonar explosivos remotamente al soltarlo.</Spanish>
<Hungarian>Robbanóanyagok távoli robbantásához való, elengedéskor gyújt.</Hungarian>
<Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian>
<Italian>Usato per attivare esplosivi quando rilasciato</Italian>
<Italian>Usato per attivare esplosivi al momento del rilascio</Italian>
</Key>
<Key ID="STR_ACE_Explosives_Pickup">
<English>Pick up</English>

View File

@ -10,6 +10,7 @@
<Spanish>Iluminar objetivo / Medir distancia</Spanish>
<Russian>Подсветить цель / Замерить расстояние</Russian>
<Hungarian>Célpont lézerezése / Távolság Bemérése</Hungarian>
<Italian>Misura la distanza</Italian>
</Key>
<Key ID="STR_ACE_FCS_ZeroedTo">
<English>Zeroed To</English>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="FlashSuppressors">
<Key ID="STR_ACE_muzzle_mzls_H">

View File

@ -6,109 +6,137 @@ class CfgAmmo {
//class ace_arty_105mm_m1_m782_time;
//class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {};
//class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox {
// ACE_FRAG_SKIP = 1;
// GVAR(skip) = 1;
//};
class Bo_GBU12_LGB;
class Nou_GBU12 : Bo_GBU12_LGB {
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
ACE_FRAG_METAL = 140000;
ACE_FRAG_CHARGE = 87000;
ACE_FRAG_GURNEY_C = 2320;
ACE_FRAG_GURNEY_K = 1/2;
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
GVAR(metal) = 140000;
GVAR(charge) = 87000;
GVAR(gurney_c) = 2320;
GVAR(gurney_k) = 1/2;
sideAirFriction = 0.04;
airFriction = 0.04;
laserLock = 0;
};
class GrenadeBase;
class Grenade;
class GrenadeHand: Grenade {
ACE_FRAG_SKIP = 0;
ACE_FRAG_FORCE = 1;
GVAR(skip) = 0;
GVAR(force) = 1;
// This is a good high-drag frag type for grenades.
ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"};
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
/*
These values are based on the M67 Grenade, should be tweaked for
individual grenades.
*/
ACE_FRAG_METAL = 210; // metal in grams
ACE_FRAG_CHARGE = 185; // explosive in grams
ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
GVAR(metal) = 210; // metal in grams
GVAR(charge) = 185; // explosive in grams
GVAR(gurney_c) = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations
GVAR(gurney_k) = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations
};
class GrenadeHand_stone: GrenadeHand {
ACE_FRAG_SKIP = 1;
GVAR(skip) = 1;
};
class SmokeShell: GrenadeHand {
ACE_FRAG_SKIP = 1;
GVAR(skip) = 1;
};
class RocketBase;
//class R_Hydra_HE: RocketBase {
// ACE_FRAG_SKIP = 1;
// GVAR(skip) = 1;
//};
//class R_57mm_HE: RocketBase {
// ACE_FRAG_SKIP = 1;
// GVAR(skip) = 1;
//};
class R_80mm_HE: RocketBase {
ACE_FRAG_SKIP = 1;
GVAR(skip) = 1;
};
//class R_S8T_AT: RocketBase {
// ACE_FRAG_SKIP = 1;
// GVAR(skip) = 1;
//};
class BombCore;
class Bo_Mk82: BombCore {
ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
ACE_FRAG_METAL = 140000;
ACE_FRAG_CHARGE = 87000;
ACE_FRAG_GURNEY_C = 2320;
ACE_FRAG_GURNEY_K = 1/2;
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
GVAR(metal) = 140000;
GVAR(charge) = 87000;
GVAR(gurney_c) = 2320;
GVAR(gurney_k) = 1/2;
};
class G_40mm_HE: GrenadeBase {
ACE_FRAG_SKIP = 0;
ACE_FRAG_FORCE = 1;
GVAR(skip) = 0;
GVAR(force) = 1;
};
class ACE_G_40mm_HEDP: G_40mm_HE {
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;
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
GVAR(metal) = 200;
GVAR(charge) = 45;
GVAR(gurney_c) = 2830;
GVAR(gurney_k) = 3/5;
};
class ACE_G_40mm_HE: ACE_G_40mm_HEDP {
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;
GVAR(classes)[] = {"ACE_frag_tiny_HD"};
GVAR(metal) = 200;
GVAR(charge) = 32;
GVAR(gurney_c) = 2700;
GVAR(gurney_k) = 3/5;
};
class ACE_G_40mm_Practice: ACE_G_40mm_HE {
ACE_FRAG_SKIP = 1;
GVAR(skip) = 1;
};
class ACE_G40mm_HE_VOG25P: G_40mm_HE {
ACE_FRAG_SKIP = 0;
ACE_FRAG_FORCE = 1;
GVAR(skip) = 0;
GVAR(force) = 1;
};
// curator ammo entries
class Sh_82mm_AMOS;
class ModuleOrdnanceMortar_F_Ammo: Sh_82mm_AMOS {
GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"};
GVAR(metal) = 800;
GVAR(charge) = 4200;
GVAR(gurney_c) = 2320;
GVAR(gurney_k) = 1/2;
};
class Sh_155mm_AMOS;
class ModuleOrdnanceHowitzer_F_ammo: Sh_155mm_AMOS {
GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"};
GVAR(metal) = 1950;
GVAR(charge) = 15800;
GVAR(gurney_c) = 2320;
GVAR(gurney_k) = 1/2;
};
//class R_230mm_HE;
//class ModuleOrdnanceRocket_F_ammo: R_230mm_HE {
//};
//class R_230mm_fly;
//class ModuleOrdnanceRocket_F_subammo: R_230mm_fly {
//};
// end of curator ammo entries
//class R_SMAW_HEDP;
//class R_MEEWS_HEDP : R_SMAW_HEDP {
// ACE_FRAG_FORCE = 1;
// ACE_FRAG_MULTIPLIER = 1.2;
// GVAR(force) = 1;
// GVAR(multiplier) = 1.2;
//};
//class MissileBase;
//class M_Hellfire_AT: MissileBase {
// ACE_FRAG_FORCE = 1;
// ACE_FRAG_MULTIPLIER = 1.75;
// GVAR(force) = 1;
// GVAR(multiplier) = 1.75;
//};
/*
class B_762x51_Ball;
class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement?
@ -263,51 +291,51 @@ class CfgAmmo {
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};
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 ACE_frag_base: B_65x39_Caseless {
timeToLive = 12;
typicalSpeed = 1500;
deflecting = 65;
};
class ACE_frag_tiny: ACE_frag_base {
hit = 6;
airFriction = BASE_DRAG;
caliber = 0.75;
};
class ACE_frag_tiny_HD: ACE_frag_base {
hit = 6;
airFriction = BASE_DRAG_HD;
caliber = 0.75;
};
class ACE_frag_small: ACE_frag_base {
hit = 12;
airFriction = BASE_DRAG*0.9;
};
class ACE_frag_small_HD: ACE_frag_base {
hit = 12;
airFriction = BASE_DRAG_HD*0.9;
};
class ACE_frag_medium: ACE_frag_base {
hit = 14;
airFriction = BASE_DRAG*0.75;
caliber = 1.2;
};
class ACE_frag_medium_HD: ACE_frag_base {
hit = 14;
airFriction = BASE_DRAG_HD*0.75;
caliber = 1.2;
};
class ACE_frag_large: ACE_frag_base {
hit = 28;
indirectHit = 2;
@ -315,19 +343,19 @@ class CfgAmmo {
airFriction = BASE_DRAG*0.65;
caliber = 2;
explosive = 0;
};
class ACE_frag_large_HD: ACE_frag_large {
hit = 28;
indirectHit = 2;
indirectHitRange = 0.25;
airFriction = BASE_DRAG_HD*0.65;
caliber = 2;
};
class ACE_frag_huge: ACE_frag_large {
hit = 40;
indirectHit = 4;
@ -335,7 +363,7 @@ class CfgAmmo {
airFriction = BASE_DRAG*0.5;
caliber = 2.8;
};
class ACE_frag_huge_HD: ACE_frag_large {
hit = 40;
indirectHit = 4;
@ -343,19 +371,19 @@ class CfgAmmo {
airFriction = BASE_DRAG_HD*0.5;
caliber = 2.8;
};
class ACE_frag_spall_small: ACE_frag_small {
timeToLive = 0.1;
};
class ACE_frag_spall_medium: ACE_frag_medium {
timeToLive = 0.15;
};
class ACE_frag_spall_large: ACE_frag_large {
timeToLive = 0.25;
};
class ACE_frag_spall_huge: ACE_frag_huge {
timeToLive = 0.3;
};

View File

@ -26,6 +26,9 @@ GVAR(tracesStarted) = false;
GVAR(traceID) = -1;
GVAR(autoTrace) = true;
// TODO setting
GVAR(enabled) = true;
// * Other Shit */
PREP(frag_trace);

View File

@ -3,11 +3,11 @@
#ifdef DEBUG_MODE_FULL
GVAR(traceFrags) = true;
#endif
// player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
"_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect",
// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive",
"_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar",
"_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k",
"_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect",
"_fragment"];
@ -40,21 +40,21 @@ if(!alive _round && (_initialData select 6) == 1) then {
};
if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
// player sideChat format["BBBB"];
// ACE_player sideChat format["BBBB"];
_exit = false;
_vm = 1;
_velocity = _initialData select 5;
_oldVelocity = _velocity call BIS_fnc_magnitude;
_curVelocity = (velocity _round) call BIS_fnc_magnitude;
if(alive _round) then {
_diff = _velocity vectorDiff (velocity _round);
_polar = _diff call CBA_fnc_vect2polar;
// player sideChat format["polar: %1", _polar];
// ACE_player sideChat format["polar: %1", _polar];
if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then {
if(_caliber < 2.5) then {
// player sideChat format["exit!"];
// ACE_player sideChat format["exit!"];
_exit = true;
} else {
_vm = 1-(_curVelocity/_oldVelocity);
@ -78,20 +78,20 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
];
// _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)];
// diag_log text format["b: %1", _blah];
// _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]];
// NOU_TRACES set[(count NOU_TRACES), _data];
if(!lineIntersects [_pos1, _pos2]) exitWith {
// player sideChat format["FOUND!"];
// ACE_player sideChat format["FOUND!"];
_spallPos = _pos2;
};
};
if(!isNil "_spallPos") then {
_spallPolar = _velocity call CBA_fnc_vect2polar;
if(_explosive > 0) then {
// player sideChat format["EXPLOSIVE!"];
// ACE_player sideChat format["EXPLOSIVE!"];
_warn = false;
_c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE");
if(_c == 0) then { _c = 1; _warn = true;};
@ -109,7 +109,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
_fragPower = (((_m/_c)+_k)^-(1/2))*_gC;
_spallPolar set[0, _fragPower*0.66];
};
_fragTypes = [
"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",
@ -117,7 +117,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
"ACE_frag_spall_huge"
];
// diag_log text format["SPALL POWER: %1", _spallPolar select 0];
_spread = 15+(random 25);
_spallCount = 5+(random 10);
@ -130,14 +130,14 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
_dir = _dir % 360;
_vel = (_spallPolar select 0)*0.33*_vm;
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
_fragType = round (random ((count _fragTypes)-1));
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
_fragment setPosASL _spallPos;
_fragment setVelocity _spallFragVect;
if(GVAR(traceFrags)) then {
[player, _fragment, [1,0.5,0,1]] call FUNC(addTrack);
[ACE_player, _fragment, [1,0.5,0,1]] call FUNC(addTrack);
};
};
_spread = 5+(random 5);
@ -151,14 +151,14 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then {
_dir = _dir % 360;
_vel = (_spallPolar select 0)*0.55*_vm;
_vel = (_vel-(_vel*0.25))+(random (_vel*0.5));
_spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
_fragType = round (random ((count _fragTypes)-1));
_fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
_fragment setPosASL _spallPos;
_fragment setVelocity _spallFragVect;
if(GVAR(traceFrags)) then {
[player, _fragment, [1,0,0,1]] call FUNC(addTrack);
[ACE_player, _fragment, [1,0,0,1]] call FUNC(addTrack);
};
};
};

View File

@ -1,6 +1,6 @@
#include "script_component.hpp"
private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall"];
if !(isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {};
if !(!isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {};
_gun = _this select 0;
_type = _this select 4;
@ -11,10 +11,10 @@ if(_round in GVAR(blackList)) exitWith {
};
_doFragTrack = false;
if(_gun == player) then {
if(_gun == ACE_player) then {
_doFragTrack = true;
} else {
if((gunner _gun) == player) then {
if((gunner _gun) == ACE_player) then {
_doFragTrack = true;
} else {
if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then {
@ -28,14 +28,18 @@ if(_doSpall) then {
GVAR(spallHPData) = [];
};
if(GVAR(spallIsTrackingCount) > 5) then {
// player sideChat "LIMT!";
// ACE_player sideChat "LIMT!";
_doSpall = false;
} else {
GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1;
};
};
// player sideChat format["c: %1", GVAR(spallIsTrackingCount)];
[player, _round, [1,0,0,1]] call nou_fnc_addTrack;
// ACE_player sideChat format["c: %1", GVAR(spallIsTrackingCount)];
#ifdef DEBUG_MODE_FULL
[ACE_player, _round, [1,0,0,1]] call FUNC(addTrack);
#endif
if(_doFragTrack && alive _round) then {
GVAR(trackedObjects) pushBack _round;
_spallTrack = [];
@ -44,5 +48,5 @@ if(_doFragTrack && alive _round) then {
if(_doSpall) then {
[_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack);
};
// player sideChat "WTF2";
// ACE_player sideChat "WTF2";
};

View File

@ -9,14 +9,14 @@
if(!isServer) exitWith { };
// _startTime = diag_tickTime;
private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed",
"_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom",
"_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox",
"_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir",
"_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount",
private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed",
"_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom",
"_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox",
"_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir",
"_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount",
"_sectorSize", "_sectorOffset", "_randomDir"];
_round = _this select 0;
_lastPos = _this select 1;
_lastVel = _this select 2;
@ -108,8 +108,8 @@ _fragArcs = [];
_fragArcs set[360, 0];
#ifdef DEBUG_MODE_FULL
player sideChat format["_fragRange: %1", _fragRange];
player sideChat format["_objects: %1", _objects];
ACE_player sideChat format["_fragRange: %1", _fragRange];
ACE_player sideChat format["_objects: %1", _objects];
#endif
_doRandom = false;
if(_isArmed && (count _objects) > 0) then {
@ -127,16 +127,16 @@ if(_isArmed && (count _objects) > 0) then {
_cubic = _bbX*_bbY*_bbZ;
if(_cubic > 1) then {
_doRandom = true;
_targetVel = (velocity _target);
_targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))];
_targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))];
_targetPos set[2, (_targetPos select 2)+_add];
_baseVec = _lastPos vectorFromTo _targetPos;
_dir = floor(_baseVec call CBA_fnc_vectDir);
_currentCount = _fragArcs select _dir;
if(isNil "_currentCount") then {
@ -153,18 +153,18 @@ if(_isArmed && (count _objects) > 0) then {
};
for "_i" from 1 to _count do {
_vec = +_baseVec;
_vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)];
_vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)];
_vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)];
_fp = (_fragPower-(random (_fragPowerRandom)));
_vel = [
(_vec select 0)*_fp,
(_vec select 1)*_fp,
(_vec select 2)*_fp
];
_fragType = round (random ((count _fragTypes)-1));
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
// diag_log text format["fp: %1 %2", _fp, typeOf _fragObj];
@ -176,7 +176,7 @@ if(_isArmed && (count _objects) > 0) then {
GVAR(traceFrags) = true;
#endif
if(GVAR(traceFrags)) then {
[player, _fragObj, [1,0,0,1]] call FUNC(addTrack);
[ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack);
};
_fragCount = _fragCount + 1;
_currentCount = _currentCount + 1;
@ -198,15 +198,15 @@ if(_isArmed && (count _objects) > 0) then {
_sectorOffset = 360 * (_i - 1) / (_randomCount max 1);
_randomDir = random(_sectorSize);
_vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))];
_fp = (_fragPower-(random (_fragPowerRandom)));
_vel = [
(_vec select 0)*_fp,
(_vec select 1)*_fp,
(_vec select 2)*_fp
];
_fragType = round (random ((count _fragTypes)-1));
_fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
_fragObj setPosASL _lastPos;
@ -217,14 +217,14 @@ if(_isArmed && (count _objects) > 0) then {
GVAR(traceFrags) = true;
#endif
if(GVAR(traceFrags)) then {
[player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack);
[ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack);
};
_fragCount = _fragCount + 1;
};
};
};
// #ifdef DEBUG_MODE_FULL
// player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
// player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
// ACE_player sideChat format["total frags: %1", GVAR(TOTALFRAGS)];
// ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))];
// #endif
// _endTime = diag_tickTime;

View File

@ -15,11 +15,11 @@ if (!alive _round) then {
[_this select 1] call cba_fnc_removePerFrameHandler;
if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then {
GVAR(trackedObjects) = GVAR(trackedObjects) - [_round];
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP");
_skip = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(skip));
if(_skip == 0) then {
_explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive");
_indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange");
_force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE");
_force = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(force));
_fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange));
if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then {
[QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent;

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="Goggles">
<Key ID="STR_ACE_Goggles_ShowInThirdPerson">

View File

@ -82,7 +82,7 @@ class CfgAmmo {
SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100};
SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70};
SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70};
timeToLive = 60;
timeToLive = 6;
fuseDistance = 2.3;
model = PATHTOF(models\ACE_m84_thrown.p3d);
};

View File

@ -56,7 +56,7 @@ _affected = _grenade nearEntities ["CAManBase", 20];
};
} forEach [[0,0,0], [0,0,0.2], [0.1, 0.1, 0.1], [-0.1, -0.1, 0.1]];
TRACE_1("Line of sight count (out of 4)",_losCount);
if (_losCount == 0) then {
if (_losCount <= 1) then {
_strength = _strength / 10;
};

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="Grenades">
<Key ID="STR_ACE_Grenades_SwitchGrenadeMode">

View File

@ -1,4 +1,3 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit) );
@ -20,9 +19,9 @@ class Extended_Init_EventHandlers {
};
class Extended_FiredNear_EventHandlers {
class CAManBase {
class AllVehicles {
class GVAR(FiredNear) {
clientFiredNear = QUOTE( if (GVAR(enableCombatDeafness) && {_this select 0 == ACE_player}) then {_this call FUNC(firedNear)}; );
clientFiredNear = QUOTE(_this call FUNC(firedNear););
};
};
};

View File

@ -1,7 +1,14 @@
#include "script_component.hpp"
if (!hasInterface) exitWith {};
GVAR(currentDeafness) = 0;
GVAR(newStrength) = 0;
GVAR(playerVehAttenuation) = 1;
// Spawn volume updating process
[FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler;
//Update veh attunation when player veh changes
["playerVehicleChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler);
["playerTurretChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler);

View File

@ -10,6 +10,7 @@ PREP(hasEarPlugsIn);
PREP(moduleHearing);
PREP(putInEarPlugs);
PREP(removeEarPlugs);
PREP(updatePlayerVehAttenuation);
PREP(updateVolume);
ADDON = true;

View File

@ -21,18 +21,19 @@
*/
#include "script_component.hpp"
private ["_unit", "_firer", "_distance", "_weapon", "_muzzle", "_mode", "_ammo", "_silencer", "_audibleFireCoef", "_loudness", "_strength", "_audibleFire", "_audibleFireTime", "_audibleFireTimeCoef"];
private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation"];
_unit = _this select 0;
_firer = _this select 1;
_distance = (_this select 2) max 1;
_weapon = _this select 3;
_muzzle = _this select 4;
_mode = _this select 5;
_ammo = _this select 6;
PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo);
if (toLower _weapon in ["throw", "put"]) exitWith {};
if (_unit != vehicle _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {};
//Only run if combatDeafness enabled:
if (!GVAR(enableCombatDeafness)) exitWith {};
//Only run if firedNear object is player or player's vehicle:
if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {};
if (_weapon in ["Throw", "Put"]) exitWith {};
_vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttenuation)};
if (_distance < 1) then {_distance = 1;};
_silencer = switch (_weapon) do {
case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0};
@ -42,18 +43,15 @@ _silencer = switch (_weapon) do {
};
_audibleFireCoef = 1;
//_audibleFireTimeCoef = 1;
if (_silencer != "") then {
_audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire");
//_audibleFireTimeCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFireTime");
};
_audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire");
//_audibleFireTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFireTime");
_loudness = _audibleFireCoef * _audibleFire / 64;
_strength = _loudness - (_loudness/50 * _distance); // linear drop off
_strength = _vehAttenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off
if (_strength < 0.01) exitWith {};
[{_this call FUNC(earRinging)}, [_unit, _strength], 0.2, 0] call EFUNC(common,waitAndExecute);
[{_this call FUNC(earRinging)}, [ACE_player, _strength], 0.2, 0] call EFUNC(common,waitAndExecute);

View File

@ -0,0 +1,57 @@
/*
* Author: PabstMirror
* Gets the sound attenuation of a player to the outside.
*
* Arguments:
* None
*
* Return Value:
* Ammount that unit can hear outside <NUMBER>
*
* Example:
* [] call ace_hearing_fnc_updatePlayerVehAttenuation
*
* Public: No
*/
#include "script_component.hpp"
_vehicle = vehicle ACE_player;
if (isNull _vehicle) exitWith {};
_newAttenuation = 1;
if (ACE_player != _vehicle) then {
_effectType = "";
_turretPath = [ACE_player] call EFUNC(common,getTurretIndex);
_effectType = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "attenuationEffectType");
if (!(_turretPath isEqualTo [])) then {
_turretConfig = [(configFile >> "CfgVehicles" >> (typeOf _vehicle)), _turretPath] call EFUNC(common,getTurretConfigPath);
if ((getNumber (_turretConfig >> "disableSoundAttenuation")) == 1) then {
_effectType = "";
} else {
if (isText (_turretConfig >> "soundAttenuationTurret")) then {
_effectType = getText (_turretConfig >> "soundAttenuationTurret");
};
};
};
_newAttenuation = switch (true) do {
case (_effectType == ""): {1};
case (_effectType == "CarAttenuation"): {0.5};
case (_effectType == "RHS_CarAttenuation"): {0.5};
case (_effectType == "OpenCarAttenuation"): {1};
case (_effectType == "TankAttenuation"): {0.1};
case (_effectType == "HeliAttenuation"): {0.3};
case (_effectType == "OpenHeliAttenuation"): {0.9};
case (_effectType == "SemiOpenHeliAttenuation"): {0.6};
case (_effectType == "HeliAttenuationGunner"): {0.85};
case (_effectType == "HeliAttenuationRamp"): {0.85};
default {1};
};
};
TRACE_2("New vehicle attenuation",_vehicle,_newAttenuation);
GVAR(playerVehAttenuation) = _newAttenuation;

View File

@ -3,6 +3,8 @@
if (!hasInterface) exitWith {};
GVAR(ParsedTextCached) = [];
//Setup text/shadow color matrix
[] call FUNC(setupTextColors);
["SettingChanged", {

View File

@ -8,6 +8,7 @@ PREP(compileMenu);
PREP(compileMenuSelfAction);
PREP(collectActiveActionTree);
PREP(createAction);
PREP(ctrlSetParsedTextCached);
PREP(findActionNode);
PREP(handlePlayerChanged);
PREP(isSubPath);

View File

@ -53,7 +53,9 @@ _recurseFnc = {
if (_condition == "") then {_condition = "true"};
// Add canInteract (including exceptions) and canInteractWith to condition
_condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")];
if ((configName _entryCfg) != "ACE_MainActions") then {
_condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")];
};
_insertChildren = compile (getText (_entryCfg >> "insertChildren"));
_modifierFunction = compile (getText (_entryCfg >> "modifierFunction"));

View File

@ -0,0 +1,15 @@
// by commy2
#include "script_component.hpp"
private ["_ctrl", "_index", "_text"];
_ctrl = _this select 0;
_index = _this select 1;
_text = _this select 2;
//systemChat str (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"-1"));
if (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"-1")) then {
GVAR(ParsedTextCached) set [_index, _text];
_ctrl ctrlSetStructuredText parseText _text;
};

View File

@ -30,6 +30,7 @@ if (_menuType == 0) then {
GVAR(keyDownTime) = diag_tickTime;
GVAR(openedMenuType) = _menuType;
GVAR(lastTimeSearchedActions) = -1000;
GVAR(ParsedTextCached) = [];
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
visibleMap ||

View File

@ -119,6 +119,7 @@ if(!_foundTarget && GVAR(actionSelected)) then {
};
for "_i" from GVAR(iconCount) to (count GVAR(iconCtrls))-1 do {
ctrlDelete (GVAR(iconCtrls) select _i);
GVAR(ParsedTextCached) set [_i, ""];
};
GVAR(iconCtrls) resize GVAR(iconCount);
GVAR(iconCount) = 0;

View File

@ -27,7 +27,6 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
};
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
GVAR(iconCount) = GVAR(iconCount) + 1;
if(_icon == "") then {
_icon = DEFAULT_ICON;
};
@ -38,8 +37,11 @@ _text = if (GVAR(UseListMenu)) then {
format ["<img image='%1' color='%2' align='center'/><br/><t color='%3' size='0.80' align='center' shadow='1' shadowColor='%4' shadowOffset='0.06'>%5</t>", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text];
};
_ctrl ctrlSetStructuredText (parseText _text);
_text = if (GVAR(UseListMenu)) then {
//_ctrl ctrlSetStructuredText parseText _text;
[_ctrl, GVAR(iconCount), _text] call FUNC(ctrlSetParsedTextCached);
GVAR(iconCount) = GVAR(iconCount) + 1;
if (GVAR(UseListMenu)) then {
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW];
} else {
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW];

View File

@ -22,14 +22,14 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
private "_ctrl";
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
GVAR(iconCount) = GVAR(iconCount) + 1;
if (GVAR(UseListMenu)) then {
_ctrl ctrlSetStructuredText (parseText format ["<img image='%1' color='#FF0000' size='1.6'/>", _icon]);
[_ctrl, GVAR(iconCount), format ["<img image='%1' color='#FF0000' size='1.6'/>", _icon]] call FUNC(ctrlSetParsedTextCached);
_ctrl ctrlSetPosition [(_sPos select 0)-(0.014*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.05*SafeZoneW, 0.035*SafeZoneW];
} else {
_ctrl ctrlSetStructuredText (parseText format ["<img image='%1' color='#FF0000' size='1.6' align='center'/>", _icon]);
[_ctrl, GVAR(iconCount), format ["<img image='%1' color='#FF0000' size='1.6' align='center'/>", _icon]] call FUNC(ctrlSetParsedTextCached);
_ctrl ctrlSetPosition [(_sPos select 0)-(0.050*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.1*SafeZoneW, 0.035*SafeZoneW];
};
//_ctrl ctrlSetBackgroundColor [1, 0, 0, 0.1];
GVAR(iconCount) = GVAR(iconCount) + 1;
_ctrl ctrlCommit 0;

View File

@ -17,6 +17,8 @@
<Spanish>Mostrar siempre el cursor para la interacción</Spanish>
<French>Toujours afficher le curseur pour les interactions</French>
<Italian>Mostra sempre il cursore per le interazioni</Italian>
<Polish>Zawsze wyświetlaj kursor dla interakcji</Polish>
<German>Immer den Cursor für Fremd-Interaktionen anzeigen</German>
</Key>
<Key ID="STR_ACE_Interact_Menu_UseListMenu">
<English>Display interaction menus as lists</English>
@ -73,19 +75,31 @@
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorTextMax">
<English>Interaction - Text Max</English>
<Spanish>Interacción - Ampliar texto</Spanish>
<Polish>Interakcja - Tekst max</Polish>
<French>Interaction -Texte Max</French>
<German>Interaktionstextfarbe Max</German>
<Italian>Interazioni - Testo Massimo</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorTextMin">
<English>Interaction - Text Min</English>
<Spanish>Interacción - Reducir texto</Spanish>
<Polish>Interakcja - Tekst min</Polish>
<French>Interaction - Texte Min</French>
<German>Interaktionstextfarbe Min</German>
<Italian>Interazioni - Testo Minimo</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorShadowMax">
<English>Interaction - Shadow Max</English>
<Spanish>Interacción - Ampliar sombra</Spanish>
<Polish>Interakcja - Cień max</Polish>
<French>Interaction - Ombre Max</French>
<German>Interaktionstextschatten Max</German>
<Italian>Interazioni - Ombra Massima</Italian>
</Key>
<Key ID="STR_ACE_Interact_Menu_ColorShadowMin">
<English>Interaction - Shadow Min</English>
<Spanish>Interacción - Reducir sombra</Spanish>
<Polish>Interakcja - Cień min</Polish>
<French>Interaction - Ombre Min</French>
<German>Interaktionstextschatten Min</German>
<Italian>Interazioni - Ombra Minima</Italian>
</Key>
</Package>
</Project>

View File

@ -35,7 +35,7 @@ class CfgVehicles {
class ACE_TeamManagement {
displayName = "$STR_ACE_Interaction_TeamManagement";
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)});
condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {GVAR(EnableTeamManagement)});
statement = "";
showDisabled = 0;
priority = 3.2;
@ -44,7 +44,7 @@ class CfgVehicles {
class ACE_JoinTeamRed {
displayName = "$STR_ACE_Interaction_JoinTeamRed";
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam));
statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam));
showDisabled = 1;
icon = PATHTOF(UI\team\team_red_ca.paa);
@ -53,7 +53,7 @@ class CfgVehicles {
};
class ACE_JoinTeamGreen {
displayName = "$STR_ACE_Interaction_JoinTeamGreen";
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam));
statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam));
showDisabled = 1;
icon = PATHTOF(UI\team\team_green_ca.paa);
@ -62,7 +62,7 @@ class CfgVehicles {
};
class ACE_JoinTeamBlue {
displayName = "$STR_ACE_Interaction_JoinTeamBlue";
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam));
statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam));
showDisabled = 1;
icon = PATHTOF(UI\team\team_blue_ca.paa);
@ -71,7 +71,7 @@ class CfgVehicles {
};
class ACE_JoinTeamYellow {
displayName = "$STR_ACE_Interaction_JoinTeamYellow";
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam));
statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam));
showDisabled = 1;
icon = PATHTOF(UI\team\team_yellow_ca.paa);
@ -81,7 +81,7 @@ class CfgVehicles {
class ACE_LeaveTeam {
displayName = "$STR_ACE_Interaction_LeaveTeam";
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'});
condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {assignedTeam _player != 'MAIN'});
statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam));
showDisabled = 1;
icon = PATHTOF(UI\team\team_white_ca.paa);
@ -92,8 +92,8 @@ class CfgVehicles {
class ACE_JoinGroup {
displayName = "$STR_ACE_Interaction_JoinGroup";
condition = QUOTE(side group _player == side group _target && {group _player != group _target});
statement = QUOTE([_player] joinSilent group _target;);
condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinGroup));
statement = QUOTE([_player] joinSilent group _target);
showDisabled = 0;
priority = 2.6;
icon = PATHTOF(UI\team\team_management_ca.paa);
@ -223,7 +223,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_JoinTeamBlue";
condition = QUOTE(true);
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_2(_player,'BLUE')] call FUNC(joinTeam));
statement = QUOTE([ARR_2(_player,'BLUE')] call DFUNC(joinTeam));
showDisabled = 1;
priority = 2.2;
icon = PATHTOF(UI\team\team_blue_ca.paa);
@ -233,7 +233,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_JoinTeamYellow";
condition = QUOTE(true);
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_2(_player,'YELLOW')] call FUNC(joinTeam));
statement = QUOTE([ARR_2(_player,'YELLOW')] call DFUNC(joinTeam));
showDisabled = 1;
priority = 2.1;
icon = PATHTOF(UI\team\team_yellow_ca.paa);
@ -244,7 +244,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_LeaveTeam";
condition = QUOTE(assignedTeam _player != 'MAIN');
exceptions[] = {"isNotInside"};
statement = QUOTE([ARR_2(_player,'MAIN')] call FUNC(joinTeam));
statement = QUOTE([ARR_2(_player,'MAIN')] call DFUNC(joinTeam));
showDisabled = 1;
priority = 2.5;
icon = PATHTOF(UI\team\team_white_ca.paa);
@ -252,9 +252,9 @@ class CfgVehicles {
};
class ACE_BecomeLeader {
displayName = "$STR_ACE_Interaction_BecomeLeader";
condition = QUOTE(_this call FUNC(canBecomeLeader));
condition = QUOTE(_this call DFUNC(canBecomeLeader));
exceptions[] = {"isNotInside"};
statement = QUOTE(_this call FUNC(doBecomeLeader));
statement = QUOTE(_this call DFUNC(doBecomeLeader));
showDisabled = 1;
priority = 1.0;
icon = PATHTOF(UI\team\team_white_ca.paa);
@ -405,7 +405,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_Passengers";
condition = "true";
statement = "";
insertChildren = QUOTE(_this call FUNC(addPassengersActions));
insertChildren = QUOTE(_this call DFUNC(addPassengersActions));
};
};
};
@ -423,7 +423,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_Passengers";
condition = "true";
statement = "";
insertChildren = QUOTE(_this call FUNC(addPassengersActions));
insertChildren = QUOTE(_this call DFUNC(addPassengersActions));
};
};
};
@ -443,7 +443,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_Passengers";
condition = "true";
statement = "";
insertChildren = QUOTE(_this call FUNC(addPassengersActions));
insertChildren = QUOTE(_this call DFUNC(addPassengersActions));
};
};
};
@ -461,7 +461,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_Passengers";
condition = "true";
statement = "";
insertChildren = QUOTE(_this call FUNC(addPassengersActions));
insertChildren = QUOTE(_this call DFUNC(addPassengersActions));
};
};
};
@ -479,7 +479,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_Push";
distance = 6;
condition = QUOTE(getMass _target < 1000 && {alive _target});
statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call FUNC(push););
statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call DFUNC(push););
showDisabled = 0;
priority = -1;
};
@ -490,7 +490,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_Passengers";
condition = "true";
statement = "";
insertChildren = QUOTE(_this call FUNC(addPassengersActions));
insertChildren = QUOTE(_this call DFUNC(addPassengersActions));
};
};
};
@ -509,7 +509,7 @@ class CfgVehicles {
displayName = "$STR_ACE_Interaction_Passengers";
condition = "true";
statement = "";
insertChildren = QUOTE(_this call FUNC(addPassengersActions));
insertChildren = QUOTE(_this call DFUNC(addPassengersActions));
};
};
};

View File

@ -8,6 +8,8 @@ PREP(addSelectableItem);
PREP(applyButtons);
PREP(canBecomeLeader);
PREP(canInteractWithCivilian);
PREP(canJoinGroup);
PREP(canJoinTeam);
PREP(canTapShoulder);
PREP(doBecomeLeader);
PREP(getDoor);

View File

@ -0,0 +1,12 @@
// by commy2
#include "script_component.hpp"
private ["_unit", "_target"];
_unit = _this select 0;
_target = _this select 1;
alive _target
&& {!(_target getVariable ["ACE_isUnconscious", false])}
&& {side group _unit == side group _target}
&& {group _unit != group _target}

View File

@ -0,0 +1,12 @@
// by commy2
#include "script_component.hpp"
private ["_unit", "_target"];
_unit = _this select 0;
_target = _this select 1;
alive _target
&& {!(_target getVariable ["ACE_isUnconscious", false])}
&& {!([_target] call EFUNC(common,isPlayer))}
&& {_target in units group _unit}

View File

@ -20,6 +20,7 @@
<French>Station météo portable Kestrel 4500</French>
<Spanish>Estación meteorológica Kestrel 4500 </Spanish>
<German>Kestrel 4500 Taschenwettermessgerät</German>
<Italian>Kestrel 4500 Indicatore Meteorologico Tascabile</Italian>
</Key>
<Key ID="STR_ACE_Kestrel4500_OpenKestrel">
<English>Open Kestrel 4500</English>

View File

@ -53,6 +53,7 @@
<Russian>Лазер</Russian>
<French>Laser</French>
<Spanish>Láser</Spanish>
<Italian>Laser</Italian>
</Key>
<Key ID="STR_ACE_Laserpointer_IRLaser">
<English>IR Laser</English>
@ -61,6 +62,7 @@
<Russian>ИК-лазер</Russian>
<French>Laser IR</French>
<Spanish>Láser IR</Spanish>
<Italian>Laser IR</Italian>
</Key>
<Key ID="STR_ACE_Laserpointer_switchLaserLight">
<English>Switch Laser / IR Laser</English>

View File

@ -10,6 +10,7 @@
<Czech>Štípací kleště</Czech>
<Polish>Nożyce do cięcia drutu</Polish>
<Hungarian>Drótvágó</Hungarian>
<Italian>Pinze da Taglio</Italian>
</Key>
<Key ID="STR_ACE_logistics_wirecutter_wirecutterDescription">
<English>Wirecutter</English>
@ -20,6 +21,7 @@
<Polish>Służą do cięcia drutu i płotów</Polish>
<French>Pince coupante</French>
<Hungarian>Drótok, huzalok, és kábelek vágására alkalmas olló.</Hungarian>
<Italian>Pinze da Taglio</Italian>
</Key>
<Key ID="STR_ACE_logistics_wirecutter_CutFence">
<English>Cut Fence</English>
@ -58,4 +60,4 @@
<Russian>Забор разрезан</Russian>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="MagazineRepack">
<Key ID="STR_ACE_MagazineRepack_RepackMagazines">
@ -108,4 +107,4 @@
<Italian>%1 pieno e %2 parziale</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,6 +1,11 @@
#include "\x\cba\addons\main\script_macros_common.hpp"
#include "\x\cba\addons\xeh\script_xeh.hpp"
//Faster Array Unwraping (skips the IS_ARRAY check normaly found in EXPLODE_1_SYS)
#undef EXPLODE_2_SYS
#define EXPLODE_1_SYS_FAST(ARRAY,A) A =(ARRAY) select 0
#define EXPLODE_2_SYS(ARRAY,A,B) EXPLODE_1_SYS_FAST(ARRAY,A); B = (ARRAY) select 1
// Default versioning level
#define DEFAULT_VERSIONING_LEVEL 2

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler - 2014-12-22 -->
<Project name="ACE">
<Package name="Map">

View File

@ -66,13 +66,13 @@ class ACE_Head {
EXCEPTIONS
};
class CheckResponse: CheckPulse {
displayName = "Check Response";
displayName = "$STR_ACE_MEDICAL_CHECK_RESPONSE";
condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment));
EXCEPTIONS
};
class Diagnose: CheckPulse {
displayName = "Diagnose";
displayName = "$STR_ACE_MEDICAL_ACTIONS_Diagnose";
condition = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(treatment));
EXCEPTIONS
@ -111,7 +111,7 @@ class ACE_Torso {
enableInside = 1;
};
class TriageCard {
displayName = "Triage Card";
displayName = "$STR_ACE_MEDICAL_ACTIONS_TriageCard";
distance = 2.0;
condition = "true";
statement = QUOTE([ARR_2(_target, true)] call DFUNC(displayTriageCard));
@ -158,21 +158,21 @@ class ACE_Torso {
icon = PATHTOF(UI\icons\bandage.paa);
};
class SurgicalKit: fieldDressing {
displayName = "Use Surgical Kit";
displayName = "$STR_ACE_MEDICAL_USE_SURGICALKIT";
condition = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(treatment));
EXCEPTIONS
icon = PATHTOF(UI\icons\surgicalKit.paa);
};
class PersonalAidKit: fieldDressing {
displayName = "Use Personal Aid Kit";
displayName = "$STR_ACE_MEDICAL_USE_AID_KIT";
condition = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(treatment));
EXCEPTIONS
icon = "";
};
class CPR: fieldDressing {
displayName = "CPR";
displayName = "$STR_ACE_MEDICAL_ACTIONS_CPR";
condition = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(treatment));
EXCEPTIONS

View File

@ -72,8 +72,8 @@ class ACE_Medical_Actions {
litter[] = {};
};
class Diagnose: Bandage {
displayName = "Diagnose";
displayNameProgress = "Diagnosing...";
displayName = "$STR_ACE_MEDICAL_ACTIONS_Diagnose";
displayNameProgress = "$STR_ACE_MEDICAL_ACTIONS_Diagnosing";
treatmentLocations[] = {"All"};
requiredMedic = 0;
treatmentTime = 1;
@ -250,8 +250,8 @@ class ACE_Medical_Actions {
condition = QUOTE([ARR_2(_this select 1, _this select 2)] call FUNC(hasTourniquetAppliedTo));
};
class CPR: fieldDressing {
displayName = "CPR";
displayNameProgress = "Performing CPR";
displayName = "$STR_ACE_MEDICAL_ACTIONS_CPR";
displayNameProgress = "$STR_ACE_MEDICAL_ACTIONS_PerformingCPR";
treatmentLocations[] = {"All"};
requiredMedic = 0;
treatmentTime = 15;
@ -297,23 +297,26 @@ class ACE_Medical_Advanced {
// Source: Scarle
// Also called scrapes, they occur when the skin is rubbed away by friction against another rough surface (e.g. rope burns and skinned knees).
class Abrasion {
name = "Scrape";
name = "$STR_ACE_Medical_Wounds_Abrasion";
selections[] = {"All"};
bleedingRate = 0.0001;
pain = 0.01;
causes[] = {"falling", "ropeburn", "vehiclecrash", "unknown"};
minDamage = 0.01;
class Minor {
name = "$STR_ACE_Medical_Wounds_Abrasion_Minor";
minDamage = 0.01;
maxDamage = 0.2;
bleedingRate = 0.0001;
};
class Medium {
name = "$STR_ACE_Medical_Wounds_Abrasion_Medium";
minDamage = 0.2;
maxDamage = 0.3;
bleedingRate = 0.00015;
};
class Large {
name = "$STR_ACE_Medical_Wounds_Abrasion_Large";
minDamage = 0.3;
bleedingRate = 0.0002;
};
@ -321,23 +324,26 @@ class ACE_Medical_Advanced {
// Occur when an entire structure or part of it is forcibly pulled away, such as the loss of a permanent tooth or an ear lobe. Explosions, gunshots, and animal bites may cause avulsions.
class Avulsions {
name = "Avulsion";
name = "$STR_ACE_Medical_Wounds_Avulsion";
selections[] = {"All"};
bleedingRate = 0.01;
pain = 0.3;
causes[] = {"explosive", "vehiclecrash", "grenade", "shell", "bullet", "backblast", "bite"};
minDamage = 0.2;
class Minor {
name = "$STR_ACE_Medical_Wounds_Avulsion_Minor";
minDamage = 0.2;
maxDamage = 0.3;
bleedingRate = 0.01;
};
class Medium {
name = "$STR_ACE_Medical_Wounds_Avulsion_Medium";
minDamage = 0.3;
maxDamage = 0.6;
bleedingRate = 0.02;
};
class Large {
name = "$STR_ACE_Medical_Wounds_Avulsion_Large";
minDamage = 0.5;
bleedingRate = 0.05;
};
@ -345,22 +351,25 @@ class ACE_Medical_Advanced {
// Also called bruises, these are the result of a forceful trauma that injures an internal structure without breaking the skin. Blows to the chest, abdomen, or head with a blunt instrument (e.g. a football or a fist) can cause contusions.
class Contusion {
name = "Bruise";
name = "$STR_ACE_Medical_Wounds_Contusion";
selections[] = {"All"};
bleedingRate = 0.0;
pain = 0.05;
causes[] = {"bullet", "backblast", "punch","vehiclecrash","falling"};
causes[] = {"bullet", "backblast", "punch", "vehiclecrash", "falling"};
minDamage = 0.01;
maxDamage = 0.1;
class Minor {
name = "$STR_ACE_Medical_Wounds_Contusion_Minor";
minDamage = 0.01;
maxDamage = 0.1;
};
class Medium {
name = "$STR_ACE_Medical_Wounds_Contusion_Medium";
minDamage = 0.1;
maxDamage = 0.15;
};
class Large {
name = "$STR_ACE_Medical_Wounds_Contusion_Large";
minDamage = 0.15;
maxDamage = 0.2;
};
@ -368,23 +377,26 @@ class ACE_Medical_Advanced {
// Occur when a heavy object falls onto a person, splitting the skin and shattering or tearing underlying structures.
class CrushWound {
name = "Crushed tissue";
name = "$STR_ACE_Medical_Wounds_Crush";
selections[] = {"All"};
bleedingRate = 0.01;
pain = 0.1;
causes[] = {"falling", "vehiclecrash", "punch", "unknown"};
minDamage = 0.1;
class Minor {
name = "$STR_ACE_Medical_Wounds_Crush_Minor";
minDamage = 0.1;
maxDamage = 0.45;
bleedingRate = 0.005;
};
class Medium {
name = "$STR_ACE_Medical_Wounds_Crush_Medium";
minDamage = 0.4;
maxDamage = 0.7;
bleedingRate = 0.007;
};
class Large {
name = "$STR_ACE_Medical_Wounds_Crush_Large";
minDamage = 0.6;
bleedingRate = 0.0095;
};
@ -392,23 +404,26 @@ class ACE_Medical_Advanced {
// Slicing wounds made with a sharp instrument, leaving even edges. They may be as minimal as a paper cut or as significant as a surgical incision.
class Cut {
name = "Cut";
name = "$STR_ACE_Medical_Wounds_Cut";
selections[] = {"All"};
bleedingRate = 0.01;
pain = 0.075;
causes[] = {"vehiclecrash", "grenade", "explosive", "shell", "backblast", "stab", "unknown"};
minDamage = 0.1;
class Minor {
name = "$STR_ACE_Medical_Wounds_Cut_Minor";
minDamage = 0.1;
maxDamage = 0.3;
bleedingRate = 0.005;
};
class Medium {
name = "$STR_ACE_Medical_Wounds_Cut_Medium";
minDamage = 0.3;
maxDamage = 0.65;
bleedingRate = 0.02;
};
class Large {
name = "$STR_ACE_Medical_Wounds_Cut_Large";
minDamage = 0.65;
bleedingRate = 0.05;
};
@ -416,23 +431,26 @@ class ACE_Medical_Advanced {
// Also called tears, these are separating wounds that produce ragged edges. They are produced by a tremendous force against the body, either from an internal source as in childbirth, or from an external source like a punch.
class Laceration {
name = "Tear";
name = "$STR_ACE_Medical_Wounds_Laceration";
selections[] = {"All"};
bleedingRate = 0.01;
pain = 0.075;
causes[] = {"vehiclecrash", "punch"};
minDamage = 0.01;
class Minor {
name = "$STR_ACE_Medical_Wounds_Laceration_Minor";
minDamage = 0.1;
maxDamage = 0.5;
bleedingRate = 0.005;
};
class Medium {
name = "$STR_ACE_Medical_Wounds_Laceration_Medium";
minDamage = 0.5;
maxDamage = 0.7;
bleedingRate = 0.01;
};
class Large {
name = "$STR_ACE_Medical_Wounds_Laceration_Large";
minDamage = 0.7;
bleedingRate = 0.03;
};
@ -440,22 +458,25 @@ class ACE_Medical_Advanced {
// Also called velocity wounds, they are caused by an object entering the body at a high speed, typically a bullet or small peices of shrapnel.
class velocityWound {
name = "Velocity Wound";
name = "$STR_ACE_Medical_Wounds_VelocityWound";
selections[] = {"All"};
bleedingRate = 0.01;
pain = 0.2;
causes[] = {"bullet", "grenade","explosive", "shell", "unknown"};
minDamage = 0.15;
class Minor {
name = "$STR_ACE_Medical_Wounds_VelocityWound_Minor";
minDamage = 0.15;
maxDamage = 0.3;
bleedingRate = 0.025;
};
class Medium {
name = "$STR_ACE_Medical_Wounds_VelocityWound_Medium";
minDamage = 0.3;
bleedingRate = 0.05;
};
class Large {
name = "$STR_ACE_Medical_Wounds_VelocityWound_Large";
minDamage = 0.75;
bleedingRate = 0.1;
};
@ -463,23 +484,26 @@ class ACE_Medical_Advanced {
// Deep, narrow wounds produced by sharp objects such as nails, knives, and broken glass.
class punctureWound {
name = "Puncture Wound";
name = "$STR_ACE_Medical_Wounds_PunctureWound";
selections[] = {"All"};
bleedingRate = 0.01;
pain = 0.075;
causes[] = {"stab", "grenade"};
minDamage = 0.01;
class Minor {
name = "$STR_ACE_Medical_Wounds_PunctureWound_Minor";
minDamage = 0.01;
maxDamage = 0.5;
bleedingRate = 0.01;
};
class Medium {
name = "$STR_ACE_Medical_Wounds_PunctureWound_Medium";
minDamage = 0.5;
maxDamage = 0.75;
bleedingRate = 0.03;
};
class Large {
name = "$STR_ACE_Medical_Wounds_PunctureWound_Large";
minDamage = 0.65;
bleedingRate = 0.08;
};
@ -487,7 +511,7 @@ class ACE_Medical_Advanced {
};
class fractures {
class Femur {
name = "Broken Femur";
name = "$STR_ACE_Medical_Wounds_Femur";
selections[] = {"Head", "Torso"};
pain = 0.2;
causes[] = {"Bullet", "VehicleCrash", "Backblast", "Explosive", "Shell", "Grenade"};

View File

@ -33,9 +33,6 @@ class CfgWeapons {
};
class ACE_packingBandage: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
type = 16;
displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY;
picture = QUOTE(PATHTOF(ui\items\packingBandage_x_ca.paa));
model = QUOTE(PATHTOF(data\packingbandage.p3d));
@ -47,9 +44,6 @@ class CfgWeapons {
};
class ACE_elasticBandage: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
type = 16;
displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY;
picture = QUOTE(PATHTOF(ui\items\elasticBandage_x_ca.paa));
model = "\A3\Structures_F_EPA\Items\Medical\Bandage_F.p3d";
@ -61,9 +55,6 @@ class CfgWeapons {
};
class ACE_tourniquet: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
type = 16;
displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY;
picture = QUOTE(PATHTOF(ui\items\tourniquet_x_ca.paa));
model = QUOTE(PATHTOF(data\tourniquet.p3d));
@ -75,9 +66,6 @@ class CfgWeapons {
};
class ACE_morphine: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
type = 16;
displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY;
picture = QUOTE(PATHTOF(ui\items\morphine_x_ca.paa));
model = QUOTE(PATHTOF(data\morphine.p3d));
@ -89,9 +77,6 @@ class CfgWeapons {
};
class ACE_atropine: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
type = 16;
displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY;
picture = QUOTE(PATHTOF(ui\items\atropine_x_ca.paa));
model = QUOTE(PATHTOF(data\atropine.p3d));
@ -104,9 +89,6 @@ class CfgWeapons {
};
class ACE_epinephrine: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
type = 16;
displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY;
picture = QUOTE(PATHTOF(ui\items\epinephrine_x_ca.paa));
model = QUOTE(PATHTOF(data\epinephrine.p3d));
@ -118,8 +100,6 @@ class CfgWeapons {
};
class ACE_plasmaIV: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
displayName = $STR_ACE_MEDICAL_PLASMA_IV;
picture = QUOTE(PATHTOF(ui\items\plasmaIV_x_ca.paa));
descriptionShort = $STR_ACE_MEDICAL_PLASMA_IV_DESC_SHORT;
@ -142,8 +122,6 @@ class CfgWeapons {
};
class ACE_bloodIV: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
model = "\A3\Structures_F_EPA\Items\Medical\BloodBag_F.p3d";
displayName = $STR_ACE_MEDICAL_BLOOD_IV;
picture = QUOTE(PATHTOF(ui\items\bloodIV_x_ca.paa));
@ -167,8 +145,6 @@ class CfgWeapons {
};
class ACE_salineIV: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
displayName = $STR_ACE_MEDICAL_SALINE_IV;
picture = QUOTE(PATHTOF(ui\items\salineIV_x_ca.paa));
descriptionShort = $STR_ACE_MEDICAL_SALINE_IV_DESC_SHORT;
@ -191,9 +167,6 @@ class CfgWeapons {
};
class ACE_quikclot: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
type = 16;
displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY;
picture = QUOTE(PATHTOF(ui\items\quickclot_x_ca.paa));
descriptionShort = $STR_ACE_MEDICAL_QUIKCLOT_DESC_SHORT;
@ -204,9 +177,6 @@ class CfgWeapons {
};
class ACE_personalAidKit: ACE_ItemCore {
scope = 2;
value = 1;
count = 1;
type = 16;
displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY;
picture = QUOTE(PATHTOF(ui\items\personal_aid_kit_x_ca.paa));
descriptionShort = $STR_ACE_MEDICAL_AID_KIT_DESC_SHORT;

View File

@ -2,7 +2,7 @@
class CfgPatches {
class ADDON {
units[] = {"ACE_medicalSupplyCrate", "ACE_fieldDressingItem", "ACE_packingBandageItem", "ACE_elasticBandageItem", "ACE_tourniquetItem", "ACE_morphineItem", "ACE_atropineItem", "ACE_epinephrineItem", "ACE_plasmaIVItem", "ACE_bloodIVItem", "ACE_salineIVItem", "ACE_quikclotItem", "ACE_personalAidKitItem", "ACE_surgicalKitItem", "ACE_bodyBagItem", "ACE_bodyBagObject"};
units[] = {"ACE_medicalSupplyCrate", "ACE_medicalSupplyCrate_advanced", "ACE_fieldDressingItem", "ACE_packingBandageItem", "ACE_elasticBandageItem", "ACE_tourniquetItem", "ACE_morphineItem", "ACE_atropineItem", "ACE_epinephrineItem", "ACE_plasmaIVItem", "ACE_bloodIVItem", "ACE_salineIVItem", "ACE_quikclotItem", "ACE_personalAidKitItem", "ACE_surgicalKitItem", "ACE_bodyBagItem", "ACE_bodyBagObject"};
weapons[] = {"ACE_fieldDressing", "ACE_packingBandage", "ACE_elasticBandage", "ACE_tourniquet", "ACE_morphine", "ACE_atropine", "ACE_epinephrine", "ACE_plasmaIV", "ACE_plasmaIV_500", "ACE_plasmaIV_250", "ACE_bloodIV", "ACE_bloodIV_500", "ACE_bloodIV_250", "ACE_salineIV", "ACE_salineIV_500", "ACE_salineIV_250", "ACE_quikclot", "ACE_personalAidKit", "ACE_surgicalKit", "ACE_bodyBag"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction","ace_modules"};

View File

@ -33,20 +33,20 @@ if ([_caller] call FUNC(isMedic)) then {
} else {
if (_bloodPressureHigh > 20) then {
_output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_2";
_logOutPut = "Low";
_logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOW";
if (_bloodPressureHigh > 100) then {
_output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_3";
_logOutPut = "Normal";
_logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NORMAL";
if (_bloodPressureHigh > 160) then {
_output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_4";
_logOutPut = "High";
_logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_HIGH";
};
};
} else {
if (random(10) > 3) then {
_output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_5";
_logOutPut = "No Blood Pressure";
_logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NOBLOODPRESSURE";
} else {
_output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_6";
};
@ -56,5 +56,5 @@ if ([_caller] call FUNC(isMedic)) then {
["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName), round(_bloodPressureHigh),round(_bloodPressureLow)], 1.75, _caller]] call EFUNC(common,targetEvent);
if (_logOutPut != "") then {
[_target,"activity", "%1 checked Blood Pressure: %2", [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog);
[_target,"activity", localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOG", [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog);
};

View File

@ -33,14 +33,14 @@ if (_heartRate > 1.0) then {
} else {
// non medical personel will only find a pulse/HR
_heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_2";
_logOutPut = "Weak";
_logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_WEAK";
if (_heartRate > 60) then {
if (_heartRate > 100) then {
_heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_3";
_logOutPut = "Strong";
_logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_STRONG";
} else {
_heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_4";
_logOutPut = "Normal";
_logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_NORMAL";
};
};
};
@ -49,5 +49,5 @@ if (_heartRate > 1.0) then {
["displayTextStructured", [_caller], [[_heartRateOutput, [_unit] call EFUNC(common,getName), round(_heartRate)], 1.5, _caller]] call EFUNC(common,targetEvent);
if (_logOutPut != "") then {
[_unit,"activity","%1 checked Heart Rate: %2",[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog);
[_unit,"activity", localize "STR_ACE_MEDICAL_CHECK_PULSE_LOG",[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog);
};

View File

@ -186,7 +186,7 @@ if (_show) then {
_lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _x select 1];
}foreach _allInjuryTexts;
if (count _allInjuryTexts == 0) then {
_lbCtrl lbAdd "No injuries on this bodypart..";
_lbCtrl lbAdd (localize "STR_ACE_Medical_NoInjuriesBodypart");
};
_logCtrl = (_display displayCtrl 302);

View File

@ -58,7 +58,7 @@ if (_show) then {
}foreach _log;
if (count _triageCardTexts == 0) then {
_lbCtrl lbAdd "No entries on this triage card..";
_lbCtrl lbAdd (localize "STR_ACE_MEDICAL_TriageCard_NoEntry");
};
{
_lbCtrl lbAdd _x;

View File

@ -26,7 +26,7 @@ if !(_set) exitwith {
_unit setvariable ["ACE_isUnconscious", false, true];
};
if !(!(isNull _unit) && {(_unit isKindOf "CaManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{};
if !(!(isNull _unit) && {(_unit isKindOf "CAManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{};
if (!local _unit) exitwith {
[[_unit], QUOTE(DFUNC(setUnconscious)), _unit, false] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
@ -86,4 +86,7 @@ _startingTime = time;
[DFUNC(unconsciousPFH), 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler;
// unconscious can't talk
[_unit, "isUnconscious"] call EFUNC(common,muteUnit);
["medical_onUnconscious", [_unit, true]] call EFUNC(common,globalEvent);

View File

@ -31,6 +31,8 @@ if (!alive _unit) exitwith {
[_unit, false] call EFUNC(common,disableAI);
//_unit setUnitPos _originalPos;
_unit setUnconscious false;
[_unit, "isUnconscious"] call EFUNC(common,unmuteUnit);
["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent);
[(_this select 1)] call cba_fnc_removePerFrameHandler;
@ -71,6 +73,8 @@ if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith {
_unit setUnconscious false;
[_unit, "isUnconscious"] call EFUNC(common,unmuteUnit);
// ensure this statement runs only once
_args set [5, true];
};

View File

@ -1,15 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Medical">
<Key ID="STR_ACE_Medical_Injuries">
<English>INJURIES</English>
<German>VERLETZUNGEN</German>
<Italian>LESIONI</Italian>
<Russian>ТРАВМЫ</Russian>
<French>BLESSURES</French>
<Polish>OBRAŻENIA</Polish>
</Key>
<Key ID="STR_ACE_Medical_NoInjuriesBodypart">
<English>No injuries on this bodypart ...</English>
<German>Körperteil nicht verletzt ...</German>
<Italian>Non ci sono lesioni in questa parte del corpo ...</Italian>
<Russian>Данная часть тела не повреждена ...</Russian>
<French>Aucune blessures sur cette partie du corps</French>
<Polish>Brak obrażeń na tej części ciała ...</Polish>
</Key>
<Key ID="STR_ACE_Medical_litterSimulationDetail">
<English>Litter Simulation Detail</English>
<Polish>Detale zużytych medykamentów</Polish>
<Spanish>Detalle de simulación de basura</Spanish>
<Russian>Количество мусора от медицины</Russian>
<Italian>Dettagli Simulazione Rifiuti</Italian>
<French>Niveau de simulation des détritus</French>
</Key>
<Key ID="STR_ACE_Medical_litterSimulationDetail_Desc">
<English>Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting.</English>
<Polish>Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta.</Polish>
<Spanish>Detalle simulación de basura establece el número de artículos de basura que se generan a nivel local en el cliente. Las cantidades excesivas en áreas locales podrían causar caída de rendimiento, así que esto es un ajuste de cliente únicamente.</Spanish>
<Russian>Устанавливает количество мусора, который появляется после использования мед. препаратов. Большое количество мусора может уменьшить производительность, поэтому данная настройка локальна для клиента.</Russian>
<Italian>Il livello di dettagli della simulazione dei rifiuti indica il numero di rifiuti che verranno creati localmente nel client. La creazione di troppi rifiuti in aree locali potrebbe causare lag e calo di FPS. Questo è un settaggio client.</Italian>
<French>Le nieau de simulation des détritus règle la quantité de déchets qui vont être créer localement dans le client. Des quantitées excessive dans certaines zones locales aurait pu causer des chutes D'IPS, donc c'est une option client uniquement.</French>
</Key>
<Key ID="STR_ACE_Medical_Inject_Atropine">
<English>Inject Atropine</English>
@ -41,7 +63,7 @@
<Polish>Wstrzyknij morfinę</Polish>
<Czech>Aplikovat morfin</Czech>
<Russian>Ввести морфин</Russian>
<French>Morphine</French>
<French>Injecter de la morphine</French>
<Hungarian>Morfium beadása</Hungarian>
<Portuguese>Injetar Morfina</Portuguese>
<Italian>Inietta Morfina</Italian>
@ -82,7 +104,7 @@
</Key>
<Key ID="STR_ACE_Medical_Apply_Tourniquet">
<English>Apply Tourniquet</English>
<German>Aderpresse anwenden</German>
<German>Tourniquet anwenden</German>
<Spanish>Aplicar torniquete</Spanish>
<Czech>Aplikovat škrtidlo</Czech>
<Polish>Załóż stazę</Polish>
@ -257,7 +279,7 @@
</Key>
<Key ID="STR_ACE_Medical_Applying_Tourniquet">
<English>Applying Tourniquet ...</English>
<German>Setze Aderpresse an ...</German>
<German>Setze Tourniquet an ...</German>
<Spanish>Aplicando torniquete ...</Spanish>
<Czech>Aplikuji škrtidlo</Czech>
<Polish>Zakładanie stazy ...</Polish>
@ -328,7 +350,7 @@
<Russian>Проверить пульс</Russian>
<Czech>Zkontrolovat pulz</Czech>
<Polish>Sprawdź tętno</Polish>
<French>Vérifier les pulsations</French>
<French>Vérifier le pouls</French>
<Hungarian>Pulzus ellenőrzése</Hungarian>
<Italian>Controlla il polso</Italian>
</Key>
@ -345,7 +367,7 @@
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_TriageCard">
<English>Triage Card</English>
<German>Verletztenanhängekarte</German>
<German>Triagekarte</German>
<Spanish>Tarjeta de triaje</Spanish>
<Russian>Медкарта</Russian>
<Polish>Karta segregacyjna</Polish>
@ -354,28 +376,68 @@
<Hungarian>Orvosi lap</Hungarian>
<Italian>Triage Card</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_TriageCard_NoEntry">
<English>No entries on this triage card.</English>
<German>Keine Einträge auf der Triagekarte</German>
<Italian>Nessuna voce sulla Triage Card</Italian>
<Russian>Нет записей.</Russian>
<French>Aucune entrée sur cette carte de triage</French>
<Polish>Brak wpisów w tej karcie segregacyjnej.</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_Tourniquet">
<English>Tourniquet</English>
<German>Aderpresse</German>
<German>Tourniquet</German>
<Spanish>Torniquete</Spanish>
<Russian>Жгут</Russian>
<Czech>Škrtidlo</Czech>
<Polish>Staza</Polish>
<French>Garrot</French>
<French>Tourniquet</French>
<Hungarian>Érszorító</Hungarian>
<Italian>Laccio emostatico</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_RemoveTourniquet">
<English>Remove Tourniquet</English>
<German>Aderpresse entfernen</German>
<German>Tourniquet entfernen</German>
<Spanish>Quitar torniquete</Spanish>
<Russian>Снять жгут</Russian>
<Czech>Sundat škrtidlo</Czech>
<Polish>Zdejmij stazę</Polish>
<French>Enlever le garrot</French>
<French>Enlever le Tourniquet</French>
<Hungarian>Érszorító leszedése</Hungarian>
<Italian>Rimuovi laccio emostatico</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_Diagnose">
<English>Diagnose</English>
<German>Diagnose</German>
<Italian>Diagnosi</Italian>
<Russian>Диагностика</Russian>
<French>Diagnostiquer</French>
<Polish>Diagnoza</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_Diagnosing">
<English>Diagnosing ...</English>
<German>Diagnostizieren ...</German>
<Italian>Diagnosi in corso...</Italian>
<Russian>Диагностика ...</Russian>
<French>Diagnostic en cours</French>
<Polish>Diagnozowanie ...</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_CPR">
<English>CPR</English>
<German>HLW</German>
<Italian>RCP</Italian>
<Russian>Сердечно-легочная реанимация</Russian>
<French>RPC</French>
<Polish>RKO</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_PerformingCPR">
<English>Performing CPR ...</English>
<German>HLW durchführen ...</German>
<Italian>Eseguendo RCP...</Italian>
<Russian>Сердечно-легочная реанимация ...</Russian>
<French>RPC en cours</French>
<Polish>Przeprowadzanie RKO ...</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_Blood4_1000">
<English>Give Blood IV (1000ml)</English>
<German>Bluttransfusion IV (1000ml)</German>
@ -444,7 +506,7 @@
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_Saline4_1000">
<English>Give Saline IV (1000ml)</English>
<German>Kochsaltzlösung IV (1000ml)</German>
<German>Kochsalzlösung IV (1000ml)</German>
<Spanish>Dar Salino IV (1000ml)</Spanish>
<Russian>Перелить пакет физраствора (1000 мл)</Russian>
<Polish>Podaj sól fizjologiczną IV (1000ml)</Polish>
@ -455,7 +517,7 @@
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_Saline4_500">
<English>Give Saline IV (500ml)</English>
<German>Kochsaltzlösung IV (500ml)</German>
<German>Kochsalzlösung IV (500ml)</German>
<Spanish>Dar Salino IV (500ml)</Spanish>
<Russian>Перелить пакет физраствора (500 мл)</Russian>
<Polish>Podaj sól fizjologiczną IV (500ml)</Polish>
@ -466,7 +528,7 @@
</Key>
<Key ID="STR_ACE_MEDICAL_ACTIONS_Saline4_250">
<English>Give Saline IV (250ml)</English>
<German>Kochsaltzlösung IV (250ml)</German>
<German>Kochsalzlösung IV (250ml)</German>
<Spanish>Dar Salino IV (250ml)</Spanish>
<Russian>Перелить пакет физраствора (250 мл)</Russian>
<Polish>Podaj sól fizjologiczną IV (250ml)</Polish>
@ -481,7 +543,7 @@
<Spanish>Menor</Spanish>
<Russian>Несрочная помощь</Russian>
<Polish>Normalny</Polish>
<French>Léger</French>
<French>Mineur</French>
<Czech>Minimální</Czech>
<Hungarian>Enyhe</Hungarian>
<Italian>Minore</Italian>
@ -609,10 +671,10 @@
</Key>
<Key ID="STR_ACE_MEDICAL_STATUS_TOURNIQUET_APPLIED">
<English>Tourniquet [CAT]</English>
<German>Aderpresse [CAT]</German>
<German>Tourniquet [CAT]</German>
<Russian>Жгут</Russian>
<Spanish>Torniquete [CAT]</Spanish>
<French>Garrot [CAT]</French>
<French>Tourniquet [CAT]</French>
<Polish>Staza [typ. CAT]</Polish>
<Czech>Škrtidlo [CAT]</Czech>
<Hungarian>Érszorító [CAT]</Hungarian>
@ -658,7 +720,7 @@
<French>Bandage fait d'un matériel spécial utilisé pour couvrir une blessure, qui peut etre appliqué dès que le saignement a été stoppé.</French>
<Polish>Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia.</Polish>
<Hungarian>Egy különleges anyagú kötszer sebek betakarására, amelyet a vérzés elállítása után helyeznek fel.</Hungarian>
<Italian>Una benda apposta, utilizzata per coprire una ferita, la quale è applicato sopra di essa una volta fermata l'emorragia.</Italian>
<Italian>Una benda apposita, utilizzata per coprire una ferita, la quale è applicata sopra di essa una volta fermata l'emorragia.</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY">
<English>Packing Bandage</English>
@ -672,7 +734,7 @@
</Key>
<Key ID="STR_ACE_MEDICAL_PACKING_BANDAGE_DESC_SHORT">
<English>Used to pack medium to large wounds and stem the bleeding</English>
<German>Verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen</German>
<German>Wird verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen</German>
<Russian>Для тампонирования ран среднего и большого размера и остановки кровотечения.</Russian>
<Spanish>Se utiliza para vendar heridas medianas o grandes y detener el sangrado</Spanish>
<French>Utilisé pour couvrir des blessures de taille moyenne à grande. Arrête l'hémorragies</French>
@ -687,7 +749,8 @@
<French>Bandage servant à recouvrir les blessures pour arrêter les hémmoragies et faciliter la guérisson. Recouvrir une blessure est optionnel dans le cas de blessures polytraumatiques</French>
<Polish>Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran.</Polish>
<Hungarian>Egy kötszerfajta, melyet a sebek nyomására használnak a vérzés elállítása és sebgyógyulás érdekében. A nyomókötés egy lehetőség nagyobb polytraumatikus sérülések esetén.</Hungarian>
<Italian>Un bendaggio usato per bendare ferite con emorragie e facilitare la guarigione. Bendare una ferita è una opzione su ferite di vario tipo.</Italian>
<Italian>Un bendaggio usato per coprire la ferita, fermare il sanguinamento e facilitarne la guarigione. Questa tecnica è opzionale su ferite multiple.</Italian>
<German>Ein Verband, um die Wunde abzudecken und die Wundheilung zu fördern. Wunden abdecken ist eine Option bei größeren Polytraumen</German>
</Key>
<Key ID="STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY">
<English>Bandage (Elastic)</English>
@ -712,7 +775,7 @@
</Key>
<Key ID="STR_ACE_MEDICAL_BANDAGE_ELASTIC_DESC_USE">
<English>Allows an even compression and extra support to the injured area.</English>
<German></German>
<German>Ermöglicht eine gleichmäßige Kompression und zusätzliche Unterstützung für den verletzten Bereich.</German>
<Russian>Давящая повязка обеспечивает равномерное сжатие и дополнительную поддержку поврежденной области</Russian>
<French>Ce bandage peut être utilisé pour compresser la plaie afin de ralentir le saignement et assurer la tenue du bandage lors de mouvement.</French>
<Polish>Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów.</Polish>
@ -722,10 +785,10 @@
</Key>
<Key ID="STR_ACE_MEDICAL_TOURNIQUET_DISPLAY">
<English>Tourniquet (CAT)</English>
<German>Aderpresse (CAT)</German>
<German>Tourniquet [CAT]</German>
<Russian>Жгут</Russian>
<Spanish>Torniquete (CAT)</Spanish>
<French>Garrot (CAT)</French>
<French>Tourniquet (CAT)</French>
<Polish>Staza (typ. CAT)</Polish>
<Czech>Škrtidlo (CAT)</Czech>
<Hungarian>Érszorító (CAT)</Hungarian>
@ -830,7 +893,7 @@
<Spanish>Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas</Spanish>
<French>Augmente la fréquence cadiaque et annule les effets d'une réaction anaphylactique</French>
<Polish>Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne</Polish>
<German>Steigert die Herzfrequenz, um den Effekt von allergischen Reaktionen zu bekämpfen</German>
<German>Steigert die Herzfrequenz und bekämpft Symptome von allergischen Reaktionen.</German>
<Hungarian>Növeli a szívverést és ellenzi az allergiás reakciók hatásait</Hungarian>
<Italian>Aumenta il battito cardiaco e combatte gli effetti di reazioni allergiche.</Italian>
</Key>
@ -841,6 +904,7 @@
<French>Medicament qui fonctionne sur le système nerveux sympathique créant une dilatation des bronches, augmente la fréquence cardiaque et annule les effets d'une réaction allergique (anaphylaxie). Utilisé lors d'arrêt cardio-respiratoire pour augmenter les chances de retrouver un pouls.</French>
<Polish>EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności.</Polish>
<Italian>Una sostanza che permette di dilatare i bronchi, aumentare il battito cardiaco e combattere effetti di reazioni allergiche. Usato anche in casi di arresto cardiaco.</Italian>
<German>Ein Medikament, dass die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen(Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht.</German>
</Key>
<Key ID="STR_ACE_MEDICAL_PLASMA_IV">
<English>Plasma IV (1000ml)</English>
@ -860,6 +924,7 @@
<Polish>Składnik krwi, używany do zwiększenia jej objętości.</Polish>
<Hungarian>Egy térfogatnövelő vérkiegészítmény.</Hungarian>
<Italian>Aiuta ad aumentare il volume sanguigno.</Italian>
<German>Volumenerweiterungsmittel (künstliches Blutvolumen)</German>
</Key>
<Key ID="STR_ACE_MEDICAL_PLASMA_IV_DESC_USE">
<English>A volume-expanding blood supplement.</English>
@ -869,6 +934,7 @@
<Polish>Składnik krwi, używany do zwiększenia jej objętości.</Polish>
<Hungarian>Egy térfogatnövelő vérkiegészítmény.</Hungarian>
<Italian>Aiuta ad aumentare il volume sanguigno.</Italian>
<German>Volumenerweiterungsmittel (künstliches Blutvolumen)</German>
</Key>
<Key ID="STR_ACE_MEDICAL_PLASMA_IV_500">
<English>Plasma IV (500ml)</English>
@ -908,6 +974,7 @@
<Polish>Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych</Polish>
<Hungarian>Vér-infúzió, intravénás bejuttatásra egy páciensnek (hidegen tárolandó)</Hungarian>
<Italian>Sangue usato per ripristinare pazienti in cui si è verificata una perdita di sangue (conservare al fresco)</Italian>
<German>Blut IV, Bluthaushalt des Patienten wiederherstellen. (Kühl halten)</German>
</Key>
<Key ID="STR_ACE_MEDICAL_BLOOD_IV_DESC_USE">
<English>O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care.</English>
@ -916,6 +983,7 @@
<Spanish>Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdida. Uso habitual durante el transporte de heridos.</Spanish>
<Italian>Sangue 0 negativo usato per ripristinare sangue in pazienti in cui si è verificata una perdita di sangue.</Italian>
<French>Cullot sanguin O- utilisé dans de rares et stricts cas pour compléter une perte de sang importante. Administré normalement lors d'un MEDEVAC</French>
<German>O Negative Blutinfusion wird nur in seltenen Fällen verwendet, um den Bluthaushalt des Patienten zu ergänzen. Wird in der Regel wärend der Transportphase durchgeführt.</German>
</Key>
<Key ID="STR_ACE_MEDICAL_BLOOD_IV_500">
<English>Blood IV (500ml)</English>
@ -955,6 +1023,7 @@
<Polish>Sól fizjologiczna, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta</Polish>
<Hungarian>0,9%-os sósvíz-infúzió, a páciens vérmennyiségének helyreállítására</Hungarian>
<Italian>Soluzione salina, usata per ripristinare sangue nei pazienti.</Italian>
<German>Kochsalzlösung, ein medizinisches Volumenersatzmittel</German>
</Key>
<Key ID="STR_ACE_MEDICAL_SALINE_IV_DESC_USE">
<English>A medical volume-replenishing agent introduced into the blood system through an IV infusion.</English>
@ -964,6 +1033,7 @@
<Polish>Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV).</Polish>
<Hungarian>Egy orvosi térfogat-helyreállító készítmény, melyet intravénás módon lehet a szervezetbe juttatni.</Hungarian>
<Italian>Una soluzione medica per ripristinare il volume del sangue introdotta tramite trasfusione IV.</Italian>
<German>Ein medizinisches Volumenersatzmittel, dass durch einen intravenösen Zugang in den Blutkreislauf verabreicht wird. </German>
</Key>
<Key ID="STR_ACE_MEDICAL_SALINE_IV_500">
<English>Saline IV (500ml)</English>
@ -1019,7 +1089,7 @@
<English>Personal Aid Kit</English>
<Russian>Аптечка</Russian>
<Spanish>Botiquín de primeros auxilios</Spanish>
<French>Équipement de support vital</French>
<French>Trousse de premiers soins</French>
<Polish>Apteczka osobista</Polish>
<German>Persönliches Verbandpäckchen</German>
<Hungarian>Elsősegélycsomag</Hungarian>
@ -1036,12 +1106,18 @@
<Italian>Include vario materiale medico per trattamenti avanzati.</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_AID_KIT_DESC_USE">
<English></English>
<Russian></Russian>
<French></French>
<Spanish></Spanish>
<English>Personal Aid Kit for in field stitching or advanced treatment</English>
<Polish>W znacznym stopniu poprawia stan pacjenta</Polish>
<Italian></Italian>
<Russian>Полевая аптчека для продвинутого лечения и зашивания ран</Russian>
<German>Persönliches Verbandspäckchen zum ambulanten Nähen und fortgeschrittener Behandlung.</German>
<French>Trousse de premiers soins pour coudre sur le terrain et traitements avancés.</French>
</Key>
<Key ID="STR_ACE_MEDICAL_USE_AID_KIT">
<English>Use Personal Aid Kit</English>
<German>Verbandpäckchen benutzen</German>
<Russian>Использовать аптечку</Russian>
<French>Utiliser la Trousse de premier soins</French>
<Polish>Użyj apteczki osobistej</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_SURGICALKIT_DISPLAY">
<English>Surgical Kit</English>
@ -1073,6 +1149,13 @@
<Hungarian>Sebészeti készlet komplex orvosi feladatok terepen való ellátására</Hungarian>
<Italian>Kit chirurgico per trattamenti avanzati sul campo.</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_USE_SURGICALKIT">
<English>Use Surgical Kit</English>
<German>Operationsset benutzen</German>
<Russian>Использовать хирургический набор</Russian>
<French>Utiliser la trousse chirugicale</French>
<Polish>Zszyj rany</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_BODYBAG_DISPLAY">
<English>Bodybag</English>
<French>Housse mortuaire</French>
@ -1123,6 +1206,13 @@
<Hungarian>Vérnyomás megmérése...</Hungarian>
<Italian>Controllando la pressione sanguigna..</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOG">
<English>%1 checked Blood Pressure: %2</English>
<German>%1 kontrollierte Blutdruck: %2</German>
<Russian>%1 проверил артериальное давление: %2</Russian>
<French>%1 à vérifié la tension: %2</French>
<Polish>%1 sprawdził ciśnienie krwi: %2</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_CHECKED_MEDIC">
<English>You checked %1</English>
<French>Vous diagnostiquez %1</French>
@ -1141,6 +1231,7 @@
<Hungarian>A vérnyomás %2/%3</Hungarian>
<Italian>Hai riscontrato una pressione di %2/%3</Italian>
<Polish>Wyczuwasz ciśnienie krwi o wartości %2/%3</Polish>
<German>Der Blutdruck liegt bei %2/%3</German>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_2">
<English>You find a low blood pressure</English>
@ -1192,6 +1283,34 @@
<Hungarian>Nem sikerült a vérnyomás megmérése</Hungarian>
<Italian>Manca strumento per misurare pressione sanguigna</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOW">
<English>Low</English>
<German>Niedrig</German>
<Russian>Низкое</Russian>
<French>Faible</French>
<Polish>Niskie</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NORMAL">
<English>Normal</English>
<German>Normal</German>
<Russian>Нормальное</Russian>
<French>Normale</French>
<Polish>Normalne</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_HIGH">
<English>High</English>
<German>Hoch</German>
<Russian>Высокое</Russian>
<French>Haute</French>
<Polish>Wysokie</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NOBLOODPRESSURE">
<English>No Blood Pressure</English>
<German>Kein Blutdruck</German>
<Russian>Артериальное давление отсутствует</Russian>
<French>Aucune tension</French>
<Polish>Brak ciśnienia krwi</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_PULSE">
<English>Pulse</English>
<Russian>Пульс</Russian>
@ -1203,14 +1322,14 @@
<Italian>Polso</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_PULSE_CONTENT">
<English>Checking Heart Rate..</English>
<English>Checking Heart Rate ...</English>
<French>Vérification du rythme cardiaque ...</French>
<Russian>Проверка пульса ...</Russian>
<Spanish>Comprobando ritmo cardíaco...</Spanish>
<Polish>Sprawdzanie tętna...</Polish>
<German>Kontrolliere Herzfrequenz</German>
<Spanish>Comprobando ritmo cardíaco ...</Spanish>
<Polish>Sprawdzanie tętna ...</Polish>
<German>Kontrolliere Herzfrequenz ...</German>
<Hungarian>Szívverés-szám mérése...</Hungarian>
<Italian>Controllando il battito cardiaco..</Italian>
<Italian>Controllando il battito cardiaco ...</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_PULSE_CHECKED_MEDIC">
<English>You checked %1</English>
@ -1218,13 +1337,41 @@
<French>Vous examinez %1</French>
<Spanish>Examinando a %1</Spanish>
<Polish>Zbadałeś %1</Polish>
<German>Kontrolliertt %1</German>
<German>Kontrolliert %1</German>
<Hungarian>A %1 ellenőrizve</Hungarian>
<Italian>Hai diagnosticato %1</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_PULSE_LOG">
<English>%1 checked Heart Rate: %2</English>
<German>%1 kontrollierte Herzfrequenz: %2</German>
<Russian>%1 проверил пульс: %2</Russian>
<French>%1 à vérifié le rythme cardiaque: %2</French>
<Polish>%1 sprawdził tętno: %2</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_PULSE_WEAK">
<English>Weak</English>
<German>Schwach</German>
<Russian>Слабый</Russian>
<French>Faible</French>
<Polish>Słabe</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_PULSE_NORMAL">
<English>Normal</English>
<German>Normal</German>
<Russian>Нормальный</Russian>
<French>Normal</French>
<Polish>Normalne</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_PULSE_STRONG">
<English>Strong</English>
<German>Stark</German>
<Russian>Сильный</Russian>
<French>Fort</French>
<Polish>Silne</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_1">
<English>You find a Heart Rate of %2</English>
<French>Rythme carquiaque de %2</French>
<French>Rythme cardiaque de %2</French>
<Russian>Пульс %2 уд./мин.</Russian>
<Spanish>El ritmo cardíaco es de %2</Spanish>
<Polish>Wyczuwasz tętno o wartości %2</Polish>
@ -1318,37 +1465,65 @@
<French>Vous avez examiné %1</French>
<Spanish>Examinas a %1</Spanish>
<Polish>Zbadałeś %1</Polish>
<German>Du versucht %1 anzusprechen</German>
<German>Du hast versucht, %1 anzusprechen</German>
<Hungarian>Megnézted %1-t</Hungarian>
<Italian>Hai controllato %1</Italian>
</Key>
<Key ID="STR_ACE_MEDICAL_diagnoseMessage">
<English>Patient %1&lt;br/&gt;is %2.&lt;br/&gt;%3.&lt;br/&gt;%4</English>
<Spanish>El paciente %1&lt;br/&gt;está %2.&lt;br/&gt;%3.&lt;br/&gt;%4</Spanish>
<Russian>Пациент %1&lt;br/&gt;%2.&lt;br/&gt;%3.&lt;br/&gt;%4</Russian>
<German>Patient %1&lt;br/&gt;ist %2.&lt;br/&gt;%3.&lt;br/&gt;%4</German>
<French>Patient %1&lt;br/&gt;est %2.&lt;br/&gt;%3.&lt;br/&gt;</French>
<Polish>Pacjent %1&lt;br/&gt;jest %2.&lt;br/&gt;%3.&lt;br/&gt;%4</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_diagnoseAlive">
<English>alive</English>
<Spanish>vivo</Spanish>
<Spanish>vivo</Spanish>
<Russian>жив</Russian>
<German>lebendig</German>
<French>vivant</French>
<Polish>żywy</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_diagnoseDead">
<English>dead</English>
<Spanish>muerto</Spanish>
<Spanish>muerto</Spanish>
<Russian>мертв</Russian>
<German>tot</German>
<French>mort</French>
<Polish>martwy</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_lostBlood">
<English>He's lost some blood</English>
<Spanish>Ha perdido algo de sangre</Spanish>
<Spanish>Ha perdido algo de sangre</Spanish>
<Russian>Есть кровопотеря</Russian>
<German>Er hat etwas Blut verloren</German>
<French>Il à perdu du sang</French>
<Polish>Stracił trochę krwi</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_noBloodloss">
<English>He hasn't lost blood</English>
<Spanish>No ha perdido sangre</Spanish>
<Spanish>No ha perdido sangre</Spanish>
<Russian>Нет кровопотери</Russian>
<German>Er hat kein Blut verloren</German>
<French>il n'a pas perdu de sang</French>
<Polish>Nie stracił krwi</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_inPain">
<English>He is in pain</English>
<Spanish>Tiene dolor</Spanish>
<Spanish>Tiene dolor</Spanish>
<Russian>Испытывает боль</Russian>
<German>Er hat Schmerzen</German>
<French>il souffre</French>
<Polish>Odczuwa ból</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_noPain">
<English>He is not in pain</English>
<Spanish>No tiene dolor</Spanish>
<Spanish>No tiene dolor</Spanish>
<Russian>Не испытывает боли</Russian>
<German>Er hat keine Schmerzen</German>
<French>Il ne souffre pas</French>
<Polish>Nie odczuwa bólu</Polish>
</Key>
<Key ID="STR_ACE_MEDICAL_BANDAGED">
<English>Bandaged</English>
@ -1358,6 +1533,7 @@
<Polish>Zabandażowano</Polish>
<Hungarian>Bekötözve</Hungarian>
<Italian>Bendato</Italian>
<German>verbunden</German>
</Key>
<Key ID="STR_ACE_MEDICAL_APPLY_BANDAGE">
<English>You bandage %1 (%2)</English>
@ -1367,6 +1543,7 @@
<Polish>Bandażujesz %1 (%2)</Polish>
<Hungarian>Bekötözöd %1-t (%2)</Hungarian>
<Italian>Stai bendando %1 (%2)</Italian>
<German>Du verbindest %1 (%2)</German>
</Key>
<Key ID="STR_ACE_MEDICAL_IS_BANDAGING_YOU">
<English>%1 is bandaging you</English>
@ -1376,10 +1553,12 @@
<Polish>%1 bandażuje Ciebie</Polish>
<Hungarian>%1 bekötöz téged</Hungarian>
<Italian>%1 ti sta bendando</Italian>
<German>%1 verbindet dich</German>
</Key>
<Key ID="STR_ACE_MEDICAL_START_STITCHING_INJURIES">
<English>You start stitching injures from %1 (%2)</English>
<English>You start stitching injuries from %1 (%2)</English>
<Russian>Вы зашиваете ранения от %1 (%2)</Russian>
<German>Du nähst die Wunden von %1 (%2)</German>
<French>Vous suturez %1 (%2)</French>
<Spanish>Estás suturando heridas de %1 en %2</Spanish>
<Polish>Zszywasz rany %1 (%2)</Polish>
@ -1389,8 +1568,9 @@
<Key ID="STR_ACE_MEDICAL_STITCHING">
<English>Stitching</English>
<Russian>Наложение швов</Russian>
<French>Sutures</French>
<Spanish>Suturando</Spanish>
<German>Nähen</German>
<French>Sutures</French>
<Polish>Szycie</Polish>
<Hungarian>Összevarrás</Hungarian>
<Italian>Suturando</Italian>
@ -1398,8 +1578,9 @@
<Key ID="STR_ACE_MEDICAL_YOU_TREAT_AIRWAY">
<English>You treat the airway of %1</English>
<Russian>Вы интубируете раненого %1</Russian>
<French>Vous traitez les voies respiratoires de %1</French>
<Spanish>Estás intubando a %1</Spanish>
<German>Du behandelst die Atemwege von %1</German>
<French>Vous traitez les voies respiratoires de %1</French>
<Polish>Udrażniasz drogi oddechowe %1</Polish>
<Hungarian>Kezeled %1 légútját</Hungarian>
<Italian>Controlli le vie respiratorie di %1</Italian>
@ -1420,6 +1601,7 @@
<French>%1 traite vos voies respiratoires</French>
<Spanish>%1 te está intubando</Spanish>
<Polish>%1 udrażnia Twoje drogi oddechowe</Polish>
<German>%1 behandelt deine Atemwege</German>
<Hungarian>%1 kezeli a légútadat</Hungarian>
<Italian>%1 ti sta trattando le vie respiratorie</Italian>
</Key>
@ -1487,6 +1669,7 @@
<English>Unload patient</English>
<Spanish>Descargar al paciente</Spanish>
<Russian>Выгрузить пациента</Russian>
<German>Patient Ausladen</German>
<Polish>Wyładuj pacjenta</Polish>
<French>Débarquer le patient</French>
<Hungarian>Sebesült kihúzása</Hungarian>
@ -1496,6 +1679,7 @@
<English>Load patient</English>
<Spanish>Cargar al paciente en</Spanish>
<Russian>Погрузить пациента</Russian>
<German>Patient Einladen</German>
<Polish>Załaduj pacjenta</Polish>
<French>Embarquer le patient</French>
<Hungarian>Sebesült berakása</Hungarian>
@ -1505,6 +1689,7 @@
<English>Place body in bodybag</English>
<Spanish>Colocar cuerpo en bolsa para cadáveres</Spanish>
<Russian>Поместить тело в мешок для трупов</Russian>
<German>Körper in Leichesack verstauen</German>
<Polish>Zapakuj ciało do worka na zwłoki</Polish>
<French>Mettre le corps dans la housse mortuaire</French>
<Hungarian>Test hullazsákba helyezése</Hungarian>
@ -1514,6 +1699,7 @@
<English>Placing body in bodybag</English>
<Spanish>Colocando cuerpo en bolsa para cadáveres</Spanish>
<Russian>Упаковка тела ...</Russian>
<German>Verstaue Körper in Leichensack</German>
<Polish>Pakowanie ciała do worka na zwłoki</Polish>
<French>Placement du corps dans la housse</French>
<Hungarian>Test hullazsákba helyezése ...</Hungarian>
@ -1523,6 +1709,7 @@
<English>%1 has bandaged patient</English>
<Spanish>%1 has vendado al paciente</Spanish>
<Russian>%1 перевязал пациента</Russian>
<German>%1 hat den Patienten verbunden</German>
<Polish>%1 zabandażował pacjenta</Polish>
<French>%1 a pansé le patient</French>
<Hungarian>%1 bekötözte a pácienst</Hungarian>
@ -1531,6 +1718,7 @@
<Key ID="STR_ACE_MEDICAL_ACTIVITY_usedItem">
<English>%1 used %2</English>
<Spanish>%1 usó %2</Spanish>
<German>%1 benutzt %2</German>
<Russian>%1 использовал %2</Russian>
<Polish>%1 użył %2</Polish>
<French>%1 utilise %2</French>
@ -1541,6 +1729,7 @@
<English>%1 has given an IV</English>
<Spanish>%1 ha puesto una IV</Spanish>
<Russian>%1 провел переливание</Russian>
<German>%1 hat eine Infusion verabreicht</German>
<Polish>%1 podał IV</Polish>
<French>%1 a administré une IV</French>
<Hungarian>%1 infúziót adott</Hungarian>
@ -1550,6 +1739,7 @@
<English>%1 applied a tourniquet</English>
<Spanish>%1 aplicado torniquete</Spanish>
<Russian>%1 наложил жгут</Russian>
<German>%1 hat einen Tourniquet angelegt</German>
<Polish>%1 założył stazę</Polish>
<French>%1 a appliqué un garrot</French>
<Hungarian>%1 felhelyezett egy érszorítót</Hungarian>
@ -1663,5 +1853,236 @@
<Spanish>Aberración cromática</Spanish>
<French>Aberration chromatique</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Abrasion">
<English>Scrape</English>
<German>Kratzer</German>
<Russian>Ссадина</Russian>
<French>Eraflure</French>
<Polish>Draśnięcie</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Abrasion_Minor">
<English>Minor Scrape</English>
<German>Kleiner Kratzer</German>
<Russian>Малая ссадина</Russian>
<French>Eraflure Mineure</French>
<Polish>Pomniejsze draśnięcie</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Abrasion_Medium">
<English>Medium Scrape</English>
<German>Mittlerer Kratzer</German>
<Russian>Средняя ссадина</Russian>
<French>Moyenne Eraflure</French>
<Polish>Średnie draśnięcie</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Abrasion_Large">
<English>Large Scrape</English>
<German>Großer Kratzer</German>
<Russian>Большая ссадина</Russian>
<French>Large Eraflure</French>
<Polish>Duże draśnięcie</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Avulsion">
<English>Avulsion</English>
<German>Avulsion</German>
<Russian>Рваная рана</Russian>
<French>Avulsion</French>
<Polish>Rana płatowa</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Avulsion_Minor">
<English>Minor Avulsion</English>
<German>Kleine Avulsion</German>
<Russian>Малая рваная рана</Russian>
<French>Avulsion Mineure</French>
<Polish>Pomniejsza rana płatowa</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Avulsion_Medium">
<English>Medium Avulsion</English>
<German>Mittlere Avulsion</German>
<Russian>Средняя рваная рана</Russian>
<French>Avulsion Moyenne</French>
<Polish>Średnia rana płatowa</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Avulsion_Large">
<English>Large Avulsion</English>
<German>Große Avulsion</German>
<Russian>Большая рваная рана</Russian>
<French>Large Avulsion</French>
<Polish>Duża rana płatowa</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Contusion">
<English>Bruise</English>
<German>Prellung</German>
<Russian>Ушиб</Russian>
<French>Hématome</French>
<Polish>Stłuczenie</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Contusion_Minor">
<English>Minor Bruise</English>
<German>Kleine Prellung</German>
<Russian>Малый ушиб</Russian>
<French>Hématome Mineur</French>
<Polish>Pomniejsze stłuczenie</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Contusion_Medium">
<English>Medium Bruise</English>
<German>Mittlere Prellung</German>
<Russian>Средний ушиб</Russian>
<French>Hématome Moyen</French>
<Polish>Średnie stłuczenie</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Contusion_Large">
<English>Large Bruise</English>
<German>Große Prellung</German>
<Russian>Большой ушиб</Russian>
<French>Large Hématome</French>
<Polish>Duże stłuczenie</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Crush">
<English>Crushed tissue</English>
<German>Quetschverletzung</German>
<Russian>Компресионная травма</Russian>
<French>Tissu écrasé</French>
<Polish>Zgniecienie tkanek miękkich</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Crush_Minor">
<English>Minor crushed tissue</English>
<German>Kleine Quetschverletzung</German>
<Russian>Малая компрессионная травма</Russian>
<French>Tissu écrasé Mineur</French>
<Polish>Pomniejsze zgniecienie tkanek miękkich</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Crush_Medium">
<English>Medium crushed tissue</English>
<German>Mittlere Quetschverletzung</German>
<Russian>Средняя компрессионная травма</Russian>
<French>Tissu écrasé Moyen</French>
<Polish>Średnie zgniecienie tkanek miękkich</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Crush_Large">
<English>Large crushed tissue</English>
<German>Große Quetschverletzung</German>
<Russian>Большая компрессионная травма</Russian>
<French>Tissu écrasé Large</French>
<Polish>Duże zgniecienie tkanek miękkich</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Cut">
<English>Cut</English>
<German>Schnittwunde</German>
<Russian>Резаная рана</Russian>
<French>Coupure</French>
<Polish>Rana cięta</Polish>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Cut_Minor">
<English>Small Cut</English>
<German>Kleine Schnittwunde</German>
<Russian>Малая резаная рана</Russian>
<Polish>Pomniejsza rana cięta</Polish>
<French>Petite Coupure</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Cut_Medium">
<English>Medium Cut</English>
<German>Mittlere Schnittwunde</German>
<Russian>Средняя резаная рана</Russian>
<Polish>Średnia rana cięta</Polish>
<French>Moyenne Coupure</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Cut_Large">
<English>Large Cut</English>
<German>Große Schnittwunde</German>
<Russian>Большая резаная рана</Russian>
<Polish>Duża rana cięta</Polish>
<French>Large Coupure</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Laceration">
<English>Tear</English>
<German>Riss</German>
<Russian>Рваная рана</Russian>
<Polish>Rozerwanie skóry</Polish>
<French>Déchirure</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Laceration_Minor">
<English>Small Tear</English>
<German>Kleiner Riss</German>
<Russian>Малая рваная рана</Russian>
<Polish>Pomniejsze rozerwanie skóry</Polish>
<French>Petite Déchirure</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Laceration_Medium">
<English>Medium Tear</English>
<German>Mittlerer Riss</German>
<Russian>Средняя рваная рана</Russian>
<Polish>Średnie rozerwanie skóry</Polish>
<French>Moyenne Déchirure</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Laceration_Large">
<English>Large Tear</English>
<German>Großer Riss</German>
<Russian>Большая рваная рана</Russian>
<Polish>Duże rozerwanie skóry</Polish>
<French>Large Déchirure</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_VelocityWound">
<English>Velocity Wound</English>
<German>Ballistisches Trauma</German>
<Russian>Огнестрельная рана</Russian>
<Polish>Rana postrzałowa</Polish>
<French>Blessure de vélocité</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_VelocityWound_Minor">
<English>Smal Velocity Wound</English>
<German>Kleines Ballistisches Trauma</German>
<Russian>Малая огнестрельная рана</Russian>
<Polish>Pomniejsza rana postrzałowa</Polish>
<French>Petite Bessure de vélocité</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_VelocityWound_Medium">
<English>Medium Velocity Wound</English>
<German>Mittleres Ballistisches Trauma</German>
<Russian>Средняя огнестрельная рана</Russian>
<Polish>Średnia rana postrzałowa</Polish>
<French>Moyenne Blessure de vélocité</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_VelocityWound_Large">
<English>Large Velocity Wound</English>
<German>Großes Ballistisches Trauma</German>
<Russian>Большая огнестрельная рана</Russian>
<Polish>Duża rana postrzałowa</Polish>
<French>Large Blessure de vélocité</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_PunctureWound">
<English>Puncture Wound</English>
<German>Stichwunde</German>
<Russian>Колотая рана</Russian>
<Polish>Rana kłuta</Polish>
<French>Blessure de perforation</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_PunctureWound_Minor">
<English>Minor Puncture Wound</English>
<German>Kleine Stichwunde</German>
<Russian>Малая колотая рана</Russian>
<Polish>Pomniejsza rana kłuta</Polish>
<French>Blessure de perforation Mineure</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_PunctureWound_Medium">
<English>Medium Puncture Wound</English>
<German>Mittlere Stichwunde</German>
<Russian>Средняя колотая рана</Russian>
<Polish>Średnia rana kłuta</Polish>
<French>Blessure de perforation Moyenne</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_PunctureWound_Large">
<English>Large Puncture Wound</English>
<German>Große Stichwunde</German>
<Russian>Большая колотая рана</Russian>
<Polish>Duża rana kłuta</Polish>
<French>Large Blessure de perforation</French>
</Key>
<Key ID="STR_ACE_Medical_Wounds_Femur">
<English>Broken Femur</English>
<German>Gebrochener Oberschenkelknochen</German>
<Russian>Перелом</Russian>
<Polish>Zkłamana kość udowa</Polish>
<French>Femur Cassé</French>
</Key>
</Package>
</Project>

View File

@ -60,7 +60,7 @@ class Rsctitles {
font = "PuristaMedium";
colorText[] = {0.95, 0.95, 0.95, 0.75};
colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"};
text = "INJURIES";
text = "$STR_ACE_Medical_Injuries";
};
class InjuryList: ACE_gui_listBoxBase {
idc = 200;

View File

@ -49,7 +49,7 @@ class GVAR(triageCard) {
font = "PuristaMedium";
colorText[] = {0,0,0,1};
colorBackground[] = {0,0,0,0};
text = "TRIAGE CARD";
text = "$STR_ACE_MEDICAL_ACTIONS_TriageCard";
};
class TriageList: ACE_gui_listBoxBase {
idc = 200;

View File

@ -138,7 +138,7 @@
<Key ID="STR_ACE_microdagr_controlRange">
<English>Range:</English>
<Spanish>Distancia:</Spanish>
<German>Reichweite:</German>
<German>Distanz:</German>
<Russian>Дистанция:</Russian>
<Polish>Dystans:</Polish>
<French>Distance:</French>
@ -236,7 +236,7 @@
</Key>
<Key ID="STR_ACE_microdagr_toggleUnit">
<English>Toggle MicroDAGR Display Mode</English>
<German>MicoDAGR Anzeigemodus Wechseln</German>
<German>MicoDAGR Anzeigemodus wechseln</German>
<Spanish>Cambiar modo de pantalla del MicroDAGR</Spanish>
<Russian>Сменить режим показа MicroDAGR</Russian>
<Polish>Przełącz GUI MicroDAGR</Polish>
@ -258,7 +258,7 @@
</Key>
<Key ID="STR_ACE_microdagr_configure">
<English>Configure MicroDAGR</English>
<German>MicroDAGR Konfiguriere</German>
<German>Konfiguriere MicroDAGR</German>
<Spanish>Configurar MicroDAGR</Spanish>
<Russian>Настроить MicroDAGR</Russian>
<Czech>Konfigurovat MicroDAGR GPS</Czech>
@ -279,4 +279,4 @@
<Italian>Chiudi MicroDAGR</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited with tabler. -->
<Project name="ACE">
<Package name="missileguidance">
<Key ID="STR_ACE_MissileGuidance">
@ -18,6 +17,8 @@
<English>Advanced missile guidance, or AMG, provides multiple enhancements to missile locking and firing. It is also a framework required for missile weapon types.</English>
<Polish>Zaawansowane namierzanie rakiet, lub ZNR, dostarcza wiele poprawek do systemu namierzania rakiet oraz dodaje nowe tryby strzału. Jest to wymagana opcja dla broni rakietowych.</Polish>
<Spanish>Guiado Avanzado de Misiles, o AMG en sus siglas en inglés, ofrece múltiples mejoras en el fijado y disparo de misiles. Es también un sistema requerido para armas de tipo misil.</Spanish>
<German>Das Erweiterte Raketenlenksystem, auch AMG genannt, bietet viele Verbesserungen zum Aufschalten und Feuern mittels gelenkten Raketen. </German>
<French>Le guidage avancé de missile, ou AMG en anglais, apporte de multiple améliorations au verouillage et au tir de missiles. C'est aussi un framework requis pour tout arme de type missile.</French>
</Key>
<Key ID="STR_ACE_Hydra70_DAGR">
<English>Hydra-70 DAGR Missile</English>
@ -45,8 +46,9 @@
</Key>
<Key ID="STR_ACE_Hydra70_DAGR_Desc">
<English>Hydra-70 DAGR Laser Guided Missile</English>
<Spanish>Misil guiado por láser Hydra-70 DAGR</Spanish>
<French>Missile à guidage Hydra-70 DAGR</French>
<Spanish>Misil guiado por láser Hydra-70 DAGR</Spanish>
<French>Missile à guidage laser Hydra-70 DAGR</French>
<Polish>Laserowo naprowadzana rakieta Hydra-70 DAGR</Polish>
<German>Hydra-70 DAGR lasergelenkte Rakete</German>
<Czech>Hydra-70 DAGR laserem naváděná střela</Czech>

View File

@ -0,0 +1 @@
z\ace\Addons\mk6mortar

View File

@ -0,0 +1,17 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) );
};
};
class Extended_FiredBIS_EventHandlers {
class Mortar_01_base_F {
class ADDON {
firedBIS = QUOTE(_this call FUNC(handleFired));
};
};
};

View File

@ -0,0 +1,83 @@
class CfgVehicles {
class Man;
class CAManBase: Man {
class ACE_SelfActions {
class ACE_Equipment {
class GVAR(rangetable) {
displayName = "$STR_ACE_MK6MORTAR_rangetable_action";
condition = QUOTE(_this call FUNC(rangeTableCanUse));
statement = QUOTE(_this call FUNC(rangeTableOpen));
priority = 0;
icon = QUOTE(PATHTOF(UI\icon_rangeTable.paa));
exceptions[] = {"notOnMap", "isNotInside"};
};
};
};
};
class LandVehicle;
class StaticWeapon: LandVehicle {
class Turrets {
class MainTurret;
};
};
class StaticMortar: StaticWeapon {
class Turrets: Turrets {
class MainTurret: MainTurret {
};
};
};
class Mortar_01_base_F: StaticMortar {
class Turrets: Turrets {
class MainTurret: MainTurret {
turretInfoType = "ACE_Mk6_RscWeaponRangeArtillery";
};
};
class ACE_SelfActions {
class GVAR(toggleMils) {
displayName = "Toggle MILS";
condition = QUOTE(true);
statement = QUOTE(_this call FUNC(toggleMils));
exceptions[] = {};
};
};
};
class Logic;
class Module_F: Logic {
class ModuleDescription {};
};
class GVAR(module): Module_F {
author = "$STR_ACE_Common_ACETeam";
category = "ACE";
displayName = "MK6 Settings";
function = QFUNC(moduleInit);
scope = 2;
isGlobal = 0;
icon = QUOTE(PATHTOF(UI\Icon_Module_mk6_ca.paa));
functionPriority = 0;
class Arguments {
class airResistanceEnabled {
displayName = "Air Resitance";
description = "For Player Shots, Model Air Restiance and Wind Effects";
typeName = "BOOL";
defaultValue = 1;
};
class allowComputerRangefinder {
displayName = "Allow MK6 Computer";
description = "Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance)";
typeName = "BOOL";
defaultValue = 0;
};
class allowCompass {
displayName = "Allow MK6 Compass";
description = "Show the MK6 Digital Compass";
typeName = "BOOL";
defaultValue = 1;
};
};
class ModuleDescription: ModuleDescription {
description = "";
};
};
};

View File

@ -0,0 +1,15 @@
class CfgWeapons {
class ACE_ItemCore;
class InventoryItem_Base_F;
class ACE_RangeTable_82mm: ACE_ItemCore {
author = "$STR_ACE_Common_ACETeam";
scope = 2;
displayName = "$STR_ACE_MK6MORTAR_rangetable_name";
descriptionShort = "$STR_ACE_MK6MORTAR_rangetable_description";
picture = QUOTE(PATHTOF(UI\icon_rangeTable.paa));
class ItemInfo: InventoryItem_Base_F {
mass = 0.5;
};
};
};

View File

@ -0,0 +1,10 @@
ace_mk6mortar
==========
Tweaks the mk6 mortar from Arma3
## Maintainers
The people responsible for merging changes to this component or answering potential questions.
- [PabstMirror](https://github.com/PabstMirror)

View File

@ -0,0 +1,44 @@
class RscInGameUI {
class RscWeaponRangeArtillery {
class CA_IGUI_elements_group: RscControlsGroup {};
};
class ACE_Mk6_RscWeaponRangeArtillery: RscWeaponRangeArtillery {
onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_Mk6_RscWeaponRangeArtillery',(_this select 0))]; _this call FUNC(turretDisplayLoaded););
controls[] = {"ACE_MILS_GROUP", "CA_IGUI_elements_group","CA_RangeElements_group"};
class ACE_MILS_GROUP: CA_IGUI_elements_group {
idc = 80170;
class controls {
class CA_Heading_MILS: RscText {
idc = 80156;
style = 2;
colorText[] = {0.706,0.0745,0.0196,1};
sizeEx = "0.028*SafezoneH";
shadow = 0;
font = "EtelkaMonospacePro";
text = "015";
x = "25.0 * (0.01875 * SafezoneH)";
y = "6.3 * (0.025 * SafezoneH)";
w = "3.3333 * (0.01875 * SafezoneH)";
h = "1 * (0.025 * SafezoneH)";
};
class CA_Elev_MILS: RscText {
idc = 80175;
style = 1;
sizeEx = "0.038*SafezoneH";
colorText[] = {0.706,0.0745,0.0196,1};
shadow = 0;
font = "EtelkaMonospacePro";
text = "80.5";
x = "36.8 * (0.01875 * SafezoneH)";
y = "29.3 * (0.025 * SafezoneH)";
w = "5.2 * (0.01875 * SafezoneH)";
h = "1.2 * (0.025 * SafezoneH)";
};
class CA_Elev_Need_MILS: CA_Elev_MILS {
idc = 80176;
y = "30.8 * (0.025 * SafezoneH)";
};
};
};
};
};

View File

@ -0,0 +1,87 @@
class ACE_82mm_RangeTable_Dialog {
idd = -1;
movingEnable = 1;
onLoad = "uiNamespace setVariable ['ACE_82mm_RangeTable_Dialog', _this select 0];";
objects[] = {};
class ControlsBackground {
class TableBackground: RscPicture {
idc = -1;
text = QUOTE(PATHTOF(UI\RangeTable_background.paa));
x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
w = "16.2634559672906 * (safeZoneH / 40)";
h = "23 * ((safeZoneH / 1.2) / 25)";
colorBackground[] = {1,1,1,1};
};
class ChargeBackground: RscText {
idc = -1;
x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
w = "4 * (safeZoneH / 40)";
h = "5 * ((safeZoneH / 1.2) / 25)";
colorBackground[] = {0,0,0,1};
};
};
class controls {
class TheTable: RscListNBox {
idc = 20001;
// style = ST_CENTER + ST_MULTI + LB_TEXTURES;
// style = ST_LEFT + ST_MULTI + LB_TEXTURES;
// style = LB_MULTI + ST_LEFT; // Style
x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
y = "3.76 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
w = "16.2634559672906 * (safeZoneH / 40)";
h = "20.24 * ((safeZoneH / 1.2) / 25)";
columns[] = {(10/867),(86/867),(171/867),(238/867),(320/867),(405/867),
(485/867),(546/867),(607/867),(668/867),(729/867),(790/867)};
rowHeight = 0.015 * safeZoneH;
sizeEx = "0.014 * safeZoneH";
font = "EtelkaMonospacePro";
drawSideArrows = 1;
idcLeft = 14124;
idcRight = 412343243;
colorText[] = {0, 0, 0, 1};
shadow = "0";
// colorBorder[] = {1,0,0,1};
// colorBackground[] = {1, 0, 0, 1};
colorSelectBackground[] = {0, 0, 0, 0.025};
colorSelectBackground2[] = {0, 0, 0, 0.025};
colorScrollbar[] = {0.95,0,0.95,1};
class ListScrollBar: ScrollBar{
color[] = {0,0,0,0.6};
};
};
class ChargeListBox: RscListbox {
idc = 1501;
style = ST_RIGHT;
x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
w = "4 * (safeZoneH / 40)";
h = "5 * ((safeZoneH / 1.2) / 25)";
onLBSelChanged = QUOTE(_this call FUNC(rangeTablePageChange));
};
class CloseBackground: RscText {
idc = -1;
x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
w = "0.5 * (safeZoneH / 40)";
h = "0.5 * ((safeZoneH / 1.2) / 25)";
colorBackground[] = {0,0,0,0.5};
};
class CloseActiveText: RscActiveText {
idc = -1;
style = 48;
color[] = {1,1,1,0.7};
text = "A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa";
x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)";
y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)";
w = "0.5 * (safeZoneH / 40)";
h = "0.5 * ((safeZoneH / 1.2) / 25)";
colorText[] = {1,1,1,0.7};
colorActive[] = {1,1,1,1};
tooltip = "Close";
onButtonClick = "closeDialog 0";
};
};
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,5 @@
#include "script_component.hpp"
if (!hasInterface) exitWith {};
["playerVehicleChanged", {_this call FUNC(handlePlayerVehicleChanged);}] call EFUNC(common,addEventHandler);

View File

@ -0,0 +1,21 @@
#include "script_component.hpp"
ADDON = false;
PREP(dev_buildTable);
PREP(dev_formatNumber);
PREP(dev_simulateCalcRangeTableLine);
PREP(dev_simulateFindSolution);
PREP(dev_simulateShot);
PREP(handleFired);
PREP(handlePlayerVehicleChanged);
PREP(moduleInit);
PREP(rangeTableCanUse);
PREP(rangeTableOpen);
PREP(rangeTablePageChange);
PREP(rangeTablePreCalculatedValues);
PREP(toggleMils);
PREP(turretDisplayLoaded);
ADDON = true;

View File

@ -0,0 +1,47 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {"ACE_RangeTable_82mm"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction"};
author[] = {"PabstMirror"};
authorUrl = "https://github.com/acemod";
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
class RscText;
class RscListbox;
class RscListNBox;
class RscPicture;
class RscControlsGroup;
class ScrollBar;
class RscActiveText;
#include "RscInGameUI.hpp"
#include "RscRangeTable.hpp"
class ACE_Settings {
//These settings effect gameplay difficutly: defaults will leave the mortar the same as vanilla
class GVAR(airResistanceEnabled) {
value = 0;
typeName = "BOOL";
isClientSetable = 0;
};
class GVAR(allowComputerRangefinder) {
value = 1;
typeName = "BOOL";
isClientSetable = 0;
};
class GVAR(allowCompass) {
value = 1;
typeName = "BOOL";
isClientSetable = 0;
};
};

View File

@ -0,0 +1,87 @@
/*
* Author: PabstMirror
* DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay)
*
* Arguments:
* 0: Muzzle Velocity <NUMBER>
* 1: Air Friction <NUMBER>
*
* Return Value:
* <Data in clipboard>
*
* Example:
* [100, -0.0001] spawn ace_mk6mortar_fnc_dev_buildTable; //spawn (scheduled) is slower
* [100, -0.0001] call ace_mk6mortar_fnc_dev_buildTable; //faster, but will lock while processing
*
* Public: No
*/
#include "script_component.hpp"
private ["_muzzleVelocity", "_airFriction", "_stillInRange", "_currentRange", "_increasePerRow", "_outputArray", "_rangeToHit", "_lineElevation", "_lineHeightElevation", "_lineTimeOfFlight", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_lineTempDec", "_lineTempInc", "_lineAirDensDec", "_lineAirDensInc", "_result", "_outputString"];
_muzzleVelocity = _this select 0;
_airFriction = _this select 1;
_stillInRange = true;
_currentRange = 100;
_increasePerRow = 50;
_outputArray = [];
//[_rangeToHit, _lineElevation, _lineHeightElevation, _lineHeightTimeDelta, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc]
while {_stillInRange} do {
_result = [_muzzleVelocity, _currentRange, _airFriction] call FUNC(dev_simulateCalcRangeTableLine);
if (_result isEqualTo []) then {
_stillInRange = false;
} else {
if (_airFriction == 0) then {
_result set [4, 0];
_result set [5, 0];
_result set [6, 0];
_result set [7, 0];
_result set [8, 0];
_result set [9, 0];
_result set [10, 0];
};
if ((_result select 1) < 88) then {
_outputArray pushBack [
([(_result select 0), "meters", false] call FUNC(dev_formatNumber)),
([(_result select 1), "mil", true] call FUNC(dev_formatNumber)),
([(_result select 2), "mil", true] call FUNC(dev_formatNumber)),
([(_result select 3), "sec", false] call FUNC(dev_formatNumber)),
([(_result select 4), "sec", false] call FUNC(dev_formatNumber)),
([(_result select 5), "milPrecise", true] call FUNC(dev_formatNumber)),
([(_result select 6), "metersprecise", false] call FUNC(dev_formatNumber)),
([(_result select 7), "metersprecise", false] call FUNC(dev_formatNumber)),
([(_result select 8), "metersprecise", false] call FUNC(dev_formatNumber)),
([(_result select 9), "metersprecise", false] call FUNC(dev_formatNumber)),
([(_result select 10), "metersprecise", false] call FUNC(dev_formatNumber)),
([(_result select 11), "metersprecise", false] call FUNC(dev_formatNumber))
];
};
_currentRange = _currentRange + _increasePerRow;
};
hintSilent str _currentRange;
};
//handle floating point rounding errors
_outputString = format ["case ((abs(_muzzleVelocity - %1) < 0.00001) && {(abs(_airFriction - %2) < 0.00001)}): {
[
", _muzzleVelocity, _airFriction];
{
if (_forEachIndex < ((count _outputArray) - 1)) then {
_outputString = _outputString + format ["%1,
", _x];
} else {
_outputString = _outputString + format ["%1
]
};", _x];
};
} forEach _outputArray;
copyToClipboard _outputString;
rangeTableOutput = _outputString;
hint "done";

View File

@ -0,0 +1,80 @@
/*
Author: Pabst Mirror
Description:
Converts numbers into nicely formated strings.
Parameters:
0: NUMBER - Input number
1: STRING - Output type (see case statement)
2: BOOL - If output type is mil, convert input type from deg->mil
Returns:
STRING - Formatted number
Example:
[45, "mil4", true] call ace_mk6mortar_fnc_dev_formatNumber = "0800"
*/
#include "script_component.hpp"
private ["_theNumber", "_inputType", "_convertToMils", "_decimalPlaces", "_integerPlaces", "_prefix", "_return"];
_theNumber = _this select 0;
_inputType = _this select 1;
_convertToMils = _this select 2;
_decimalPlaces = -1;
_integerPlaces = -1;
switch (toLower _inputType) do {
case ("meters"): {
_decimalPlaces = 0;
_integerPlaces = 1;
};
case ("metersprecise"): {
_decimalPlaces = 1;
_integerPlaces = 1;
};
case ("meters4"): {
_decimalPlaces = 0;
_integerPlaces = 4;
};
case ("deg3precise"): {
_decimalPlaces = 2;
_integerPlaces = 3;
};
case ("mil"): {
_decimalPlaces = 0;
_integerPlaces = 1;
if (_convertToMils) then {
_theNumber = _theNumber * (6400 / 360);
};
};
case ("mil4"): {
_decimalPlaces = 0;
_integerPlaces = 4;
if (_convertToMils) then {
_theNumber = _theNumber * (6400 / 360);
};
};
case ("milprecise"): {
_decimalPlaces = 1;
_integerPlaces = 1;
if (_convertToMils) then {
_theNumber = _theNumber * (6400 / 360);
};
};
case ("sec"): {
_decimalPlaces = 1;
_integerPlaces = 1;
};
default {systemChat format ["badtype %1", _inputType];};
};
//CBA_fnc_formatNumber is silly: [-9.58545, 1, 1, false] call CBA_fnc_formatNumber == "-9.-6"
_prefix = if (_theNumber < 0) then {"-"} else {""};
_return = [abs (_theNumber), _integerPlaces, _decimalPlaces, false] call CBA_fnc_formatNumber;
(_prefix + _return)

View File

@ -0,0 +1,79 @@
/*
Author: Pabst Mirror
Description:
Builds a rangeTable line for a certian range, given muzzle velocity and air friction, returns [] if out of range.
Parameters:
0: NUMBER - Muzzle Velocity
1: NUMBER - Air Friction
2: NUMBER - Range To Hit
Returns:
ARRAY - Range Table Line Data (see return line)
Example:
[300, -0.0001, 3000] call ace_mk6mortar_fnc_simulateCalcRangeTableLine
*/
#include "script_component.hpp"
#define TIME_STEP (1/50)
private ["_startTime", "_muzzleVelocity", "_rangeToHit", "_airFriction", "_vacElevation", "_radicand", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts", "_lineElevation", "_lineTimeOfFlight", "_lineHeightElevation", "_lineHeightTimeDelta", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_result"];
_startTime = diag_tickTime;
_muzzleVelocity = _this select 0;
_rangeToHit = _this select 1;
_airFriction = _this select 2;
//Run Binary search for correct elevation
_solution = [_rangeToHit, 0, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(dev_simulateFindSolution);
if (_solution isEqualTo []) exitWith {[]};
//Real Elevation
_lineElevation = _solution select 0;
//Time Of Flight:
_lineTimeOfFlight = _solution select 1;
//Height Adjustment for -100m (another binary search)
_solution = [_rangeToHit, -100, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(dev_simulateFindSolution);
if (_solution isEqualTo []) exitWith {[]};//should never be triggered (lower elevation easier to hit)
_lineHeightElevation = ((_solution select 0) - _lineElevation);
_lineHeightTimeDelta = (_solution select 1) - _lineTimeOfFlight;
//Compute for 10x and divide to minimize rounding errors
//Crosswind
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 10, 0, TIME_STEP] call FUNC(dev_simulateShot);
_lineCrosswindDeg = (_lastTestResult select 2) / 10;
//Headwind:
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, -10, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
_lineHeadwindMeters = (_rangeToHit - (_lastTestResult select 0)) / 10;
//TailWind:
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, 10, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
_lineTailWindMeters = (_rangeToHit - (_lastTestResult select 0)) / 10;
//Air Temp Dec
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, (15 - 10), 1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
_lineTempDec = (_rangeToHit - (_lastTestResult select 0)) / 10;
//Air Temp Inc
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, (15 + 10), 1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
_lineTempInc = (_rangeToHit - (_lastTestResult select 0)) / 10;
//Air Density Dec
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 0.9, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
_lineAirDensDec = (_rangeToHit - (_lastTestResult select 0)) / 10;
//Air Density Inc
_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1.1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot);
_lineAirDensInc = (_rangeToHit - (_lastTestResult select 0)) / 10;
// systemChat format ["debug: Range %1 - in %2 sec", _rangeToHit, (diag_tickTime - _startTime)];
[_rangeToHit, _lineElevation, _lineHeightElevation, _lineHeightTimeDelta, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc]

View File

@ -0,0 +1,55 @@
/*
* Author: PabstMirror
* DEV to find a firing solution for a given range
*
* Arguments:
* 0: Range to Hit (Meters)<NUMBER>
* 1: Height To Hit (Meters)<NUMBER>
* 2: Muzzle Velocity (M/S)<NUMBER>
* 3: Air Friction <NUMBER>
* 4: Time Step (seconds) (eg 1/50 will simulate 50 cycles per second) <NUMBER>
*
* Return Value:
* ARRAY - [NUMBER - Elevation In Degrees, NUMBER - Shot Durration]
*
* Example:
* [_rangeToHit, _heightToHit, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(simulateFindSolution);
*
* Public: No
*/
#include "script_component.hpp"
private ["_rangeToHit", "_heightToHit", "_muzzleVelocity", "_airFriction", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts"];
#define MAX_ATTEMPTS 22
_rangeToHit = _this select 0;
_heightToHit = _this select 1;
_muzzleVelocity = _this select 2;
_airFriction = _this select 3;
_timeStep = _this select 4;
_maxElev = 90;
_minElev = 45; //todo - Low Angle Howitzers???
_error = 10000;
_solutionElevation = -1;
_lastTestResult = [];
_numberOfAttempts = 0;
//(binary search)
while {(_numberOfAttempts < MAX_ATTEMPTS) && {(abs _error) > 0.2}} do {
_numberOfAttempts = _numberOfAttempts + 1;
_solutionElevation = (_maxElev + _minElev) / 2;
_lastTestResult = [_solutionElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 0, _heightToHit, _timeStep] call FUNC(dev_simulateShot);
_error = _rangeToHit - (_lastTestResult select 0);
if (_error > 0) then {
_maxElev = _solutionElevation; //test range was short
} else {
_minElev = _solutionElevation; //test range was long
};
};
if (_numberOfAttempts >= MAX_ATTEMPTS) exitWith {[]};
//return the elevation and time required
[_solutionElevation, (_lastTestResult select 1)]

View File

@ -0,0 +1,73 @@
/*
* Author: PabstMirror
* DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay)
*
* Arguments:
* 0: Shot Angle (degrees) <NUMBER>
* 1: Muzzle Velocity (m/s) <NUMBER>
* 2: Air Friction <NUMBER>
* 3: Tempeture (degres celcius) <NUMBER>
* 4: Relative Air Denisty <NUMBER>
* 5: Tail Wind (m/s) <NUMBER>
* 6: Cross Wind (m/s) <NUMBER>
* 7: Height Of Target (M) <NUMBER>
* 8: Time Step (fraction of a second) <NUMBER>
*
* Return Value:
* <ARRAY> [Distance Traveled<NUMBER>, Shot Time<NUMBER>, Offset (degrees)<NUMBER>]
*
* Example:
* [45, 180, -0.0001, 15, 1, 10, 0, 0, 1/50] call ace_mk6mortar_fnc_dev_simulateShot;
*
* Public: No
*/
#include "script_component.hpp"
private ["_angleDeg", "_muzzleVelocity", "_airFriction", "_temp", "_relDensity", "_tailWind", "_crosswind", "_heightOfTarget", "_timeStep", "_wind", "_gravity", "_currentPos", "_currentVelocity", "_currentTime", "_lastPos", "_kCoefficent", "_aparentWind", "_changeInVelocity", "_linConversion", "_middlePos", "_middlePosOld", "_middleTotalTravelTime", "_offsetDeg"];
_angleDeg = _this select 0;
_muzzleVelocity = _this select 1;
_airFriction = _this select 2;
_temp = _this select 3;
_relDensity = _this select 4;
_tailWind = _this select 5;
_crosswind = _this select 6;
_heightOfTarget = _this select 7;
_timeStep = _this select 8;
_wind = [_crosswind, _tailWind, 0];
_gravity = [0,0,-9.8];
_currentPos = [0,0,0];
_muzzleVelocity = _muzzleVelocity * (((_temp + 273.13) / 288.13 - 1) / 40 + 1);
_currentVelocity = [0, (_muzzleVelocity * cos _angleDeg), (_muzzleVelocity * sin _angleDeg)];
_currentTime = 0;
_lastPos = _currentPos;
_kCoefficent = -1 * _relDensity * _airFriction; //save time in the loop and compute once
while {((_currentVelocity select 2) > 0) || ((_currentPos select 2) >= _heightOfTarget)} do {
_lastPos = _currentPos;
_aparentWind = _wind vectorDiff _currentVelocity;
_changeInVelocity = _gravity vectorAdd (_aparentWind vectorMultiply ((vectorMagnitude _aparentWind) * _kCoefficent));
_currentVelocity = _currentVelocity vectorAdd (_changeInVelocity vectorMultiply _timeStep);
_currentPos = _currentPos vectorAdd (_currentVelocity vectorMultiply _timeStep);
_currentTime = _currentTime + _timeStep;
};
//Uses linearConversion to get a weighted average betwen points before and after dropping below target height
_linConversion = linearConversion [(_lastPos select 2), (_currentPos select 2), _heightOfTarget, 0, 1, true];
_middlePos = (_lastPos vectorMultiply (1 - _linConversion)) vectorAdd (_currentPos vectorMultiply (_linConversion));
// _middlePosOld = (_lastPos vectorAdd _currentPos) vectorMultiply 0.5;
//Same to find travel time
_middleTotalTravelTime = _currentTime - (_timeStep * (1-_linConversion));
//Find shot offset (from crosswind), in degrees
_offsetDeg = (_middlePos select 0) aTan2 (_middlePos select 1);
[(_middlePos select 1), _middleTotalTravelTime, _offsetDeg]

View File

@ -0,0 +1,89 @@
/*
* Author: PabstMirror
* Called when the mortar is fired.
*
* Arguments:
* 0: mortar - Object the event handler is assigned to <OBJECT>
* 1: weapon - Fired weapon <STRING>
* 2: muzzle - Muzzle that was used <STRING>
* 3: mode - Current mode of the fired weapon <STRING>
* 4: ammo - Ammo used <STRING>
* 5: magazine - magazine name which was used <STRING>
* 6: projectile - Object of the projectile that was shot <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [clientFiredBIS-XEH] call ace_mk6mortar_fnc_handleFired
*
* Public: No
*/
#include "script_component.hpp"
private ["_shooterMan", "_bisAirFriction", "_temperature", "_newMuzzleVelocityCoefficent", "_bulletVelocity", "_bulletSpeed", "_muzzleVelocity", "_muzzleVelocityShift"];
disableSerialization;
PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile);
if (!GVAR(airResistanceEnabled)) exitWith {};
// Large enough distance to not simulate any wind deflection
if (_vehicle distance ACE_player > 8000) exitWith {false};
//AI will have no clue how to use:
_shooterMan = gunner _vehicle;
if (!([_shooterMan] call EFUNC(common,isPlayer))) exitWith {false};
//Should be zero, just make sure:
_bisAirFriction = getNumber (configFile >> "CfgAmmo" >> _ammo >> "airFriction");
if (_bisAirFriction != 0) exitWith {ERROR("Non zero base airFriction");};
//Calculate air density:
_altitude = (getPosASL _vehicle) select 2;
#define GET_TEMPERATURE_AT_HEIGHT(h) (EGVAR(weather,currentTemperature) - 0.0065 * (h))
_temperature = GET_TEMPERATURE_AT_HEIGHT(_altitude);
_pressure = _altitude call EFUNC(weather,calculateBarometricPressure);
_relativeHumidity = EGVAR(weather,currentHumidity);
_airDensity = [_temperature, _pressure, _relativeHumidity] call EFUNC(weather,calculateAirDensity);
_relativeDensity = _airDensity / 1.225;
TRACE_5("FiredWeather",_temperature,_pressure,_relativeHumidity,_airDensity,_relativeDensity);
//powder effects:
_newMuzzleVelocityCoefficent = (((_temperature + 273.13) / 288.13 - 1) / 40 + 1);
if (_newMuzzleVelocityCoefficent != 1) then {
_bulletVelocity = velocity _projectile;
_bulletSpeed = vectorMagnitude _bulletVelocity;
_bulletVelocity = (vectorNormalized _bulletVelocity) vectorMultiply (_bulletSpeed * _newMuzzleVelocityCoefficent);
_projectile setVelocity _bulletVelocity;
_muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift;
};
[{
private ["_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_dragRef", "_accelRef", "_drag", "_accel"];
PARAMS_2(_args,_pfID);
EXPLODE_4_PVT(_args,_shell,_airFriction,_time,_relativeDensity);
if (isNull _shell || {!alive _shell}) exitwith {
[_pfID] call cba_fnc_removePerFrameHandler;
};
_deltaT = time - _time;
_args set[2, time];
_bulletVelocity = velocity _shell;
_bulletSpeed = vectorMagnitude _bulletVelocity;
_trueVelocity = _bulletVelocity vectorDiff ACE_wind;
_trueSpeed = vectorMagnitude _trueVelocity;
_drag = _deltaT * _airFriction * _trueSpeed * _relativeDensity;
_accel = _trueVelocity vectorMultiply (_drag);
_bulletVelocity = _bulletVelocity vectorAdd _accel;
_shell setVelocity _bulletVelocity;
}, 0, [_projectile, MK6_82mm_AIR_FRICTION, time, _relativeDensity]] call CBA_fnc_addPerFrameHandler;

View File

@ -0,0 +1,108 @@
/*
* Author: PabstMirror
* Handles player getting into new vehicle. Loads PFEG for mortar display if it is a mortar.
*
* Arguments:
* 0:Player <OBJECT>
* 1: New Vehicle <OBJECT>
*
* Return Value:
* No
*
* Example:
* [bob, mortar] call ace_mk6mortar_fnc_handlePlayerVehicleChanged;
*
* Public: No
*/
#include "script_component.hpp"
private ["_chargeText", "_xPos", "_yPos", "_wPos", "_hPos", "_tubeWeaponName", "_fireModes"];
PARAMS_2(_player,_newVehicle);
if (isNull _newVehicle) exitWith {};
if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {};
_chargeText = (findDisplay 46) ctrlCreate ["RscStructuredText", 80085];
_xPos = (profilenamespace getvariable ["IGUI_GRID_WEAPON_X", ((safezoneX + safezoneW) - (12.4 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * (((safezoneW / safezoneH) min 1.2) / 40))]);
_yPos = 2.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable ["IGUI_GRID_WEAPON_Y", (safezoneY + 0.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))]);
_wPos = 10 * (((safezoneW / safezoneH) min 1.2) / 40);
_hPos = 1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25);
_chargeText ctrlSetPosition [_xPos, _yPos, _wPos, _hPos];
_chargeText ctrlCommit 0;
_tubeWeaponName = (weapons _newVehicle) select 0;
_fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes");
[{
PARAMS_2(_args,_pfID);
EXPLODE_3_PVT(_args,_mortarVeh,_chargeText,_fireModes);
if ((vehicle ACE_player) != _mortarVeh) then {
[_pfID] call CBA_fnc_removePerFrameHandler;
ctrlDelete _chargeText;
} else {
_useMils = _mortarVeh getVariable [QGVAR(useMils), true];
//Compute: 'charge' from weaponstate
_currentFireMode = (weaponState [_mortarVeh, [0]]) select 2;
_currentChargeMode = _fireModes find _currentFireMode;
_text = format ["<t size='0.8'>%1: %2 <img image='%3'/></t>", (localize "STR_ACE_MK6MORTAR_rangetable_charge"), _currentChargeMode, QUOTE(PATHTOF(UI\ui_charges.paa))];
_chargeText ctrlSetStructuredText parseText _text;
if (shownArtilleryComputer && {!GVAR(allowComputerRangefinder)}) then {
//Don't like this solution, but it works
closeDialog 0;
[parseText "Computer Disabled"] call EFUNC(common,displayTextStructured);
};
_display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull];
if (isNull _display) exitWith {}; //It may be null for the first frame
//Hud should hidden in 3rd person
_notGunnerView = cameraView != "GUNNER";
//Update CurrentElevation Display:
if (_notGunnerView) then {
(_display displayCtrl 80175) ctrlSetText "";
} else {
_elevDeg = parseNumber ctrlText (_display displayCtrl 175);
if (_useMils) then {
(_display displayCtrl 80175) ctrlSetText str round (_elevDeg * 6400 / 360);
} else {
(_display displayCtrl 80175) ctrlSetText str _elevDeg;
};
};
//Update ElevationNeeded Display:
if (_notGunnerView || (!GVAR(allowComputerRangefinder))) then {
(_display displayCtrl 80176) ctrlSetText "";
} else {
_elevDeg = parseNumber ctrlText (_display displayCtrl 176);
if (_elevDeg <= 0) then { //Bad data means "----" out of range
(_display displayCtrl 80176) ctrlSetText (ctrlText (_display displayCtrl 176));
} else {
if (_useMils) then {
(_display displayCtrl 80176) ctrlSetText str round (_elevDeg * 6400 / 360);
} else {
(_display displayCtrl 80176) ctrlSetText str _elevDeg;
};
};
};
//Update Heading Display:
if (_notGunnerView || (!GVAR(allowCompass))) then {
(_display displayCtrl 80156) ctrlSetText "";
} else {
_rotationDegrees = ((getDir _mortarVeh) + (((-180 / PI) * (_mortarVeh animationPhase "mainTurret")) + 360)) % 360;
if (_useMils) then {
(_display displayCtrl 80156) ctrlSetText str round (_rotationDegrees * 6400 / 360);
} else {
(_display displayCtrl 80156) ctrlSetText (ctrlText (_display displayCtrl 156));
};
};
};
}, 0, [_newVehicle, _chargeText,_fireModes]] call CBA_fnc_addPerFrameHandler;

View File

@ -0,0 +1,27 @@
/*
* Author: PabstMirror
* Loads settings from the module.
*
* Arguments:
* 0: The Module Logic Object <OBJECT>
* 1: synced objects <ARRAY>
* 2: Activated <BOOL>
*
* Return Value:
* None
*
* Example:
* [fromModule] call ace_mk6mortar_fnc_moduleInit
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_3(_logic,_syncedUnits,_activated);
if (!_activated) exitWith {WARNING("Module - placed but not active");};
if (!isServer) exitWith {};
[_logic, QGVAR(airResistanceEnabled), "airResistanceEnabled"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(allowComputerRangefinder), "allowComputerRangefinder"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(allowCompass), "allowCompass"] call EFUNC(common,readSettingFromModule);

View File

@ -0,0 +1,21 @@
/*
* Author: PabstMirror
* Can player open 82mm rangetable.
*
* Arguments:
* 0: Vehicle <OBJECT>
* 1: Player <OBJECT>
*
* Return Value:
* Can Open <BOOL>
*
* Example:
* [bob, bob] call ace_mk6mortar_fnc_rangeTableCanUse
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_2(_vehicle,_player);
"ACE_RangeTable_82mm" in (items _player);

View File

@ -0,0 +1,48 @@
/*
* Author: PabstMirror
* Opens the rangetable and fills the charge listbox.
*
* Arguments:
* No
*
* Return Value:
* No
*
* Example:
* [] call ace_mk6mortar_fnc_rangeTableOpen
*
* Public: No
*/
#include "script_component.hpp"
#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501)
private ["_weaponName", "_magazines", "_initSpeed", "_fireModes", "_muzzleVelocities", "_showToPlayer", "_artilleryCharge"];
_weaponName = "mortar_82mm"; //todo: work on other weapons
createDialog "ACE_82mm_RangeTable_Dialog";
if (isNull (uiNamespace getVariable ["ACE_82mm_RangeTable_Dialog", displayNull])) exitWith {ERROR("Dialog failed to open");};
//Get Magazine Types
_magazines = getArray (configFile >> "CfgWeapons" >> _weaponName >> "magazines");
//For now just get settings from first mag, all rounds have same flight characteristics:
if ((count _magazines) < 1) exitWith {ERROR("No Magazines for weapon");};
_initSpeed = getNumber (configFile >> "CfgMagazines" >> (_magazines select 0) >> "initSpeed");
//Get Charge Modes
_fireModes = getArray (configFile >> "CfgWeapons" >> _weaponName >> "modes");
_muzzleVelocities = [];
{
_showToPlayer = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "showToPlayer");
if (_showToPlayer == 1) then {
_artilleryCharge = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "artilleryCharge");
LIST_CHARGE lbAdd format ["%1: %2", (localize "STR_ACE_MK6MORTAR_rangetable_charge"), (count _muzzleVelocities)];
LIST_CHARGE lbSetData [(count _muzzleVelocities), str (_artilleryCharge * _initSpeed)];
_muzzleVelocities pushBack _artilleryCharge;
};
} forEach _fireModes;
LIST_CHARGE lbSetCurSel 0;

View File

@ -0,0 +1,37 @@
/*
* Author: PabstMirror
* Called when listbox selection changes. Updates the rangetable with new values.
*
* Arguments:
* No
*
* Return Value:
* No
*
* Example:
* [] call ace_mk6mortar_fnc_rangeTablePageChange
*
* Public: No
*/
#include "script_component.hpp"
#define RANGE_TABLE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 20001)
#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501)
private ["_listBoxData", "_muzzleVelocity", "_airFriction", "_precalcArray"];
_listBoxData = LIST_CHARGE lbData (lbCurSel LIST_CHARGE);
if (isNil "_listBoxData" || {_listBoxData == ""}) exitWith {ERROR("lbCurSel out of bounds or no data");};
_muzzleVelocity = parseNumber _listBoxData;
_airFriction = if (GVAR(airResistanceEnabled)) then {MK6_82mm_AIR_FRICTION} else {0};
_precalcArray = [_muzzleVelocity, _airFriction] call FUNC(rangeTablePreCalculatedValues);
lnbClear RANGE_TABLE;
{
RANGE_TABLE lnbAddRow _x;
} forEach _precalcArray;
//put dummy line at end because scrolling is fucked and can't see last line
RANGE_TABLE lnbAddRow ["", "", "", "", "", "", "", "", "", "", ""];

View File

@ -0,0 +1,271 @@
/*
* Author: PabstMirror
* Simple Lookup Table for various muzzle velocities and air frictions.
* Use ace_mk6mortar_fnc_dev_buildTable to build
*
* Arguments:
* 0: Muzzle Velocity <NUMBER>
* 1: Air Friction <NUMBER>
*
* Return Value:
* <ARRAY>
*
* Example:
* [200, 0] call ace_mk6mortar_fnc_rangeTablePreCalculatedValues
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_2(_muzzleVelocity,_airFriction);
switch (true) do {
case ((abs(_muzzleVelocity - 70) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): {
[
["100","1493","9","1.4","14.0","3.7","0.4","-0.3","0.0","-0.0","-0.0","0.0"],
["150","1438","14","1.4","13.9","2.5","0.4","-0.4","0.0","-0.0","-0.1","0.0"],
["200","1381","20","1.4","13.8","1.9","0.5","-0.4","0.0","-0.0","-0.1","0.1"],
["250","1321","27","1.5","13.6","1.5","0.5","-0.4","0.0","-0.0","-0.1","0.1"],
["300","1256","36","1.6","13.3","1.3","0.6","-0.5","0.0","-0.1","-0.1","0.1"],
["350","1183","49","1.7","12.9","1.1","0.6","-0.5","0.1","-0.1","-0.1","0.1"],
["400","1097","70","1.9","12.4","0.9","0.6","-0.5","0.1","-0.1","-0.2","0.1"],
["450","979","113","2.3","11.6","0.8","0.6","-0.5","0.1","-0.1","-0.2","0.2"]
]
};
case ((abs(_muzzleVelocity - 140) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): {
[
["150","1556","1","0.8","27.2","16.3","2.5","-2.4","0.0","-0.0","-0.2","0.2"],
["200","1541","1","0.8","27.2","12.3","2.5","-2.4","0.0","-0.0","-0.3","0.2"],
["250","1527","2","0.8","27.2","9.9","2.6","-2.4","0.0","-0.0","-0.3","0.3"],
["300","1512","2","0.8","27.2","8.3","2.7","-2.4","0.1","-0.0","-0.4","0.4"],
["350","1497","3","0.8","27.1","7.1","2.7","-2.5","0.0","-0.1","-0.5","0.4"],
["400","1482","3","0.8","27.1","6.2","2.7","-2.5","0.1","-0.1","-0.5","0.5"],
["450","1467","3","0.8","27.0","5.6","2.8","-2.5","0.1","-0.1","-0.6","0.6"],
["500","1451","4","0.8","27.0","5.0","2.9","-2.6","0.1","-0.1","-0.6","0.6"],
["550","1436","4","0.8","26.9","4.6","2.9","-2.6","0.1","-0.1","-0.7","0.7"],
["600","1420","5","0.8","26.8","4.2","3.0","-2.7","0.1","-0.1","-0.8","0.8"],
["650","1404","5","0.8","26.8","3.9","3.0","-2.7","0.1","-0.1","-0.9","0.8"],
["700","1388","6","0.8","26.7","3.6","3.1","-2.8","0.1","-0.1","-0.9","0.9"],
["750","1372","6","0.8","26.6","3.4","3.2","-2.8","0.1","-0.1","-1.0","1.0"],
["800","1355","7","0.8","26.5","3.2","3.2","-2.9","0.1","-0.1","-1.1","1.1"],
["850","1338","8","0.8","26.4","3.0","3.3","-2.9","0.1","-0.1","-1.1","1.1"],
["900","1321","8","0.8","26.2","2.8","3.4","-3.0","0.1","-0.1","-1.2","1.2"],
["950","1303","9","0.9","26.1","2.7","3.4","-3.1","0.1","-0.2","-1.3","1.2"],
["1000","1285","10","0.9","26.0","2.6","3.5","-3.1","0.2","-0.1","-1.4","1.3"],
["1050","1266","11","0.9","25.8","2.4","3.5","-3.2","0.1","-0.2","-1.4","1.4"],
["1100","1247","12","0.9","25.7","2.3","3.6","-3.3","0.1","-0.2","-1.5","1.4"],
["1150","1228","13","0.9","25.5","2.2","3.7","-3.3","0.2","-0.2","-1.6","1.5"],
["1200","1207","14","1.0","25.3","2.1","3.7","-3.4","0.2","-0.2","-1.7","1.6"],
["1250","1186","15","1.0","25.1","2.0","3.8","-3.4","0.2","-0.2","-1.7","1.7"],
["1300","1163","17","1.0","24.8","1.9","3.8","-3.5","0.2","-0.2","-1.8","1.7"],
["1350","1140","19","1.0","24.6","1.9","3.9","-3.5","0.2","-0.2","-1.9","1.8"],
["1400","1115","21","1.1","24.3","1.8","3.9","-3.6","0.2","-0.2","-1.9","1.9"],
["1450","1088","24","1.1","23.9","1.7","4.0","-3.6","0.2","-0.2","-2.0","1.9"],
["1500","1060","27","1.2","23.6","1.6","4.0","-3.7","0.2","-0.2","-2.1","2.0"],
["1550","1028","32","1.3","23.1","1.5","4.0","-3.7","0.2","-0.2","-2.1","2.1"],
["1600","991","38","1.4","22.6","1.5","4.0","-3.7","0.2","-0.2","-2.2","2.1"],
["1650","947","49","1.7","21.9","1.4","4.0","-3.7","0.2","-0.3","-2.3","2.2"],
["1700","888","71","2.1","21.0","1.3","3.9","-3.6","0.3","-0.3","-2.3","2.2"]
]
};
case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): {
[
["250","1559","1","0.6","37.3","23.8","6.1","-5.9","0.0","-0.0","-0.6","0.5"],
["300","1551","1","0.6","37.3","20.0","6.1","-5.9","0.1","-0.0","-0.7","0.7"],
["350","1543","1","0.6","37.3","17.2","6.2","-5.9","0.0","-0.1","-0.8","0.7"],
["400","1535","1","0.6","37.3","15.1","6.2","-5.9","0.1","-0.0","-0.9","0.9"],
["450","1527","1","0.6","37.3","13.4","6.3","-6.0","0.1","-0.1","-1.0","1.0"],
["500","1519","1","0.6","37.2","12.1","6.3","-6.0","0.1","-0.1","-1.1","1.1"],
["550","1510","1","0.6","37.2","11.0","6.4","-6.0","0.1","-0.1","-1.3","1.2"],
["600","1502","1","0.6","37.2","10.1","6.4","-6.1","0.1","-0.1","-1.4","1.3"],
["650","1494","1","0.6","37.2","9.4","6.5","-6.1","0.1","-0.1","-1.5","1.4"],
["700","1485","2","0.6","37.1","8.7","6.5","-6.2","0.1","-0.1","-1.6","1.5"],
["750","1477","2","0.6","37.1","8.2","6.6","-6.2","0.1","-0.1","-1.7","1.6"],
["800","1468","2","0.6","37.0","7.7","6.7","-6.3","0.1","-0.1","-1.8","1.8"],
["850","1460","2","0.6","37.0","7.2","6.7","-6.3","0.1","-0.1","-2.0","1.9"],
["900","1451","2","0.6","37.0","6.8","6.8","-6.4","0.1","-0.1","-2.1","2.0"],
["950","1443","2","0.6","36.9","6.5","6.9","-6.4","0.1","-0.1","-2.2","2.1"],
["1000","1434","2","0.6","36.9","6.2","6.9","-6.5","0.1","-0.1","-2.3","2.2"],
["1050","1425","2","0.6","36.8","5.9","7.0","-6.6","0.1","-0.2","-2.5","2.3"],
["1100","1417","3","0.6","36.8","5.6","7.1","-6.6","0.1","-0.2","-2.6","2.4"],
["1150","1408","3","0.6","36.7","5.4","7.1","-6.7","0.2","-0.2","-2.7","2.5"],
["1200","1399","3","0.6","36.6","5.2","7.2","-6.7","0.2","-0.2","-2.8","2.7"],
["1250","1390","3","0.6","36.6","5.0","7.3","-6.8","0.2","-0.2","-2.9","2.8"],
["1300","1381","3","0.6","36.5","4.8","7.4","-6.9","0.2","-0.2","-3.0","2.9"],
["1350","1372","3","0.6","36.4","4.6","7.4","-6.9","0.2","-0.2","-3.2","3.0"],
["1400","1362","4","0.6","36.4","4.4","7.5","-7.0","0.2","-0.2","-3.3","3.1"],
["1450","1353","4","0.6","36.3","4.3","7.6","-7.1","0.2","-0.2","-3.4","3.2"],
["1500","1344","4","0.6","36.2","4.2","7.7","-7.1","0.2","-0.2","-3.5","3.4"],
["1550","1334","4","0.6","36.1","4.0","7.7","-7.2","0.2","-0.2","-3.7","3.5"],
["1600","1324","4","0.6","36.0","3.9","7.8","-7.3","0.2","-0.2","-3.8","3.6"],
["1650","1314","4","0.7","35.9","3.8","7.9","-7.3","0.2","-0.2","-3.9","3.7"],
["1700","1304","5","0.7","35.8","3.7","7.9","-7.4","0.2","-0.2","-4.0","3.8"],
["1750","1294","5","0.7","35.7","3.6","8.0","-7.5","0.2","-0.2","-4.2","3.9"],
["1800","1284","5","0.7","35.6","3.5","8.1","-7.6","0.2","-0.3","-4.3","4.0"],
["1850","1274","5","0.7","35.5","3.4","8.2","-7.6","0.2","-0.3","-4.4","4.2"],
["1900","1263","6","0.7","35.4","3.3","8.2","-7.7","0.2","-0.3","-4.5","4.3"],
["1950","1253","6","0.7","35.2","3.2","8.3","-7.8","0.2","-0.3","-4.7","4.4"],
["2000","1242","6","0.7","35.1","3.1","8.4","-7.8","0.3","-0.3","-4.8","4.5"],
["2050","1231","7","0.7","35.0","3.0","8.4","-7.9","0.3","-0.3","-4.9","4.7"],
["2100","1219","7","0.7","34.8","2.9","8.5","-8.0","0.3","-0.3","-5.0","4.8"],
["2150","1208","7","0.7","34.7","2.9","8.5","-8.0","0.3","-0.3","-5.2","4.9"],
["2200","1196","8","0.7","34.5","2.8","8.6","-8.1","0.3","-0.3","-5.3","5.0"],
["2250","1184","8","0.7","34.3","2.7","8.7","-8.2","0.3","-0.3","-5.4","5.1"],
["2300","1171","9","0.8","34.2","2.7","8.7","-8.2","0.3","-0.3","-5.5","5.2"],
["2350","1158","9","0.8","34.0","2.6","8.8","-8.3","0.3","-0.3","-5.7","5.4"],
["2400","1145","10","0.8","33.8","2.5","8.8","-8.3","0.3","-0.3","-5.8","5.5"],
["2450","1132","10","0.8","33.6","2.5","8.9","-8.4","0.3","-0.3","-5.9","5.6"],
["2500","1118","11","0.8","33.3","2.4","8.9","-8.4","0.3","-0.3","-6.0","5.7"],
["2550","1103","12","0.8","33.1","2.4","9.0","-8.5","0.3","-0.3","-6.1","5.8"],
["2600","1088","13","0.9","32.8","2.3","9.0","-8.5","0.4","-0.3","-6.2","5.9"],
["2650","1072","14","0.9","32.6","2.2","9.0","-8.6","0.4","-0.4","-6.4","6.0"],
["2700","1056","15","0.9","32.3","2.2","9.0","-8.6","0.3","-0.4","-6.5","6.1"],
["2750","1038","16","1.0","31.9","2.1","9.1","-8.6","0.4","-0.4","-6.6","6.3"],
["2800","1020","18","1.0","31.6","2.1","9.1","-8.6","0.4","-0.4","-6.7","6.4"],
["2850","1000","20","1.1","31.2","2.0","9.1","-8.6","0.4","-0.4","-6.8","6.5"],
["2900","978","22","1.1","30.8","1.9","9.0","-8.6","0.4","-0.4","-6.9","6.5"],
["2950","954","26","1.2","30.3","1.9","9.0","-8.6","0.4","-0.4","-7.0","6.6"],
["3000","927","31","1.4","29.7","1.8","8.9","-8.5","0.4","-0.4","-7.1","6.7"],
["3050","894","38","1.6","29.0","1.7","8.8","-8.4","0.4","-0.4","-7.2","6.8"],
["3100","849","54","2.0","27.9","1.6","8.5","-8.3","0.4","-0.4","-7.2","6.8"]
]
};
case ((abs(_muzzleVelocity - 70) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): {
[
["100","1497","9","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["150","1445","14","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["200","1390","19","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["250","1333","26","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["300","1272","34","1.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["350","1204","45","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["400","1127","61","1.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["450","1028","91","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"]
]
};
case ((abs(_muzzleVelocity - 140) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): {
[
["150","1562","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["200","1549","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["250","1536","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["300","1523","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["350","1510","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["400","1497","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["450","1484","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["500","1471","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["550","1458","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["600","1445","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["650","1431","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["700","1418","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["750","1404","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["800","1390","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["850","1376","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["900","1362","6","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["950","1348","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1000","1333","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1050","1318","8","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1100","1303","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1150","1288","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1200","1272","10","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1250","1256","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1300","1239","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1350","1222","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1400","1205","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1450","1187","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1500","1168","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1550","1148","18","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1600","1127","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1650","1105","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1700","1082","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1750","1057","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1800","1029","31","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1850","997","37","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1900","960","46","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1950","912","63","1.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"]
]
};
case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): {
[
["300","1563","0","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["350","1556","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["400","1550","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["450","1544","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["500","1537","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["550","1531","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["600","1525","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["650","1519","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["700","1512","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["750","1506","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["800","1499","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["850","1493","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["900","1487","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["950","1480","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1000","1474","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1050","1467","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1100","1461","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1150","1454","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1200","1448","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1250","1441","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1300","1435","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1350","1428","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1400","1422","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1450","1415","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1500","1408","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1550","1402","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1600","1395","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1650","1388","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["1700","1381","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1750","1374","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1800","1367","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1850","1360","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1900","1353","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["1950","1346","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2000","1339","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2050","1332","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2100","1325","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2150","1317","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2200","1310","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2250","1302","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2300","1295","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2350","1287","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2400","1280","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2450","1272","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2500","1264","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2550","1256","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2600","1248","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2650","1240","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2700","1232","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2750","1223","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2800","1215","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["2850","1206","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2900","1197","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["2950","1188","7","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3000","1179","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["3050","1170","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3100","1160","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["3150","1151","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3200","1141","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["3250","1131","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3300","1120","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3350","1109","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3400","1098","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["3450","1087","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["3500","1075","13","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["3550","1062","14","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["3600","1049","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3650","1036","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["3700","1021","17","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3750","1006","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3800","990","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3850","971","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["3900","952","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["3950","929","32","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"],
["4000","900","40","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"],
["4050","861","56","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"]
]
};
default {
ERROR("MuzzleVelocity not found in LUT");
[]
};
};

View File

@ -0,0 +1,24 @@
/*
* Author: PabstMirror
* Toggles the mortart to show mils or degrees
*
* Arguments:
* 0: Vehicle <OBJECT>
* 1: Player <OBJECT>
*
* Return Value:
* No
*
* Example:
* [mortar,bob] call ace_mk6mortar_fnc_toggleMils;
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_2(_mortarVeh,_unit);
private "_currentSetting";
_currentSetting = _mortarVeh getVariable [QGVAR(useMils), true];
_mortarVeh setVariable [QGVAR(useMils), (!_currentSetting)];

View File

@ -0,0 +1,67 @@
/*
* Author: PabstMirror
* Called when the mk6's in game UI is loaded. Hides rangefinder data if it is disabled.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_mk6mortar_fnc_turretDisplayLoaded
*
* Public: No
*/
#include "script_component.hpp"
#define CTRL_CA_OPTICSPITCH (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSPITCH")
#define CTRL_CA_OPTICSZOOM (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSZOOM")
#define CTRL_CA_SOLUTION_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_SOLUTION_TEXT")
#define CTRL_CA_DISTANCE_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_DISTANCE_TEXT")
#define CTRL_CA_DISTANCE (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_DISTANCE")
#define CTRL_CA_TIME_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_TIME_TEXT")
#define CTRL_CA_TIME (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_TIME")
#define CTRL_CA_ELEV_NEED_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED_TEXT")
#define CTRL_CA_RANGEELEMENTS_GROUP (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_RangeElements_group")
#define CTRL_CA_HEADING (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_Heading")
#define CTRL_CA_ELEV (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV")
#define CTRL_CA_ELEV_NEED (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED")
private ["_display", "_fnc_hideControl"];
disableSerialization;
_display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull];
if (isNull _display) exitWith {};
_fnc_hideControl = {
private "_idc";
PARAMS_2(_path,_hideCtrl);
_idc = getNumber (_path >> "IDC");
_pos = [];
if (_hideCtrl) then {
_pos = [-9,-9,0,0];
} else {
{
if (isNumber (_path >> _x)) then {
_pos pushBack (getNumber (_path >> _x));
} else {
_pos pushBack (call compile (getText (_path >> _x)));
};
} forEach ["x", "y", "w", "h"];
};
(_display displayCtrl _idc) ctrlSetPosition _pos;
(_display displayCtrl _idc) ctrlCommit 0;
};
{
[_x, (!GVAR(allowComputerRangefinder))] call _fnc_hideControl;
} forEach [CTRL_CA_OPTICSPITCH, CTRL_CA_OPTICSZOOM, CTRL_CA_SOLUTION_TEXT, CTRL_CA_DISTANCE_TEXT, CTRL_CA_DISTANCE, CTRL_CA_TIME_TEXT, CTRL_CA_TIME, CTRL_CA_ELEV_NEED_TEXT, CTRL_CA_RANGEELEMENTS_GROUP];
//Always hide these, handled by the mil convertions PFEH in handlePlayerVehChanged
[CTRL_CA_HEADING, true] call _fnc_hideControl;
[CTRL_CA_ELEV, true] call _fnc_hideControl;
[CTRL_CA_ELEV_NEED, true] call _fnc_hideControl;

View File

@ -0,0 +1 @@
#include "\z\ace\addons\mk6mortar\script_component.hpp"

Some files were not shown because too many files have changed in this diff Show More